📜  在 ReactJS 中使用 Recharts 创建饼图(1)

📅  最后修改于: 2023-12-03 15:37:30.168000             🧑  作者: Mango

在 ReactJS 中使用 Recharts 创建饼图

在 ReactJS 中使用 Recharts 创建饼图是一项非常简单且显而易见的任务。Recharts 是一个基于 React 和 D3 的开源库,用于创建响应式、可组合和易于维护的数据可视化。它非常适合用于创建各种图表,包括折线图、柱形图、散点图和饼图等。

这里将介绍如何在 ReactJS 中使用 Recharts 创建饼图,并通过以下步骤详细说明。

步骤
  1. 首先,您需要导入 recharts 包。使用以下命令进行安装:
npm install recharts
  1. 然后,您需要在您的组件中导入所需的 Recharts 组件。在组件中使用以下语法:
import { PieChart, Pie, Cell, Legend } from 'recharts';
  • PieChart 组件用于创建饼图。
  • Pie 组件用于绘制饼图的数据。
  • Cell 组件用于定义饼图中的颜色单元格。
  • Legend 组件用于定义饼图上的图例。
  1. 接下来,您需要准备数据。饼图需要一个表示比例的数字数组和一个表示每个比例的名称的字符串数组。以下是一个示例数据:
const data = [
  { name: 'A', value: 400 },
  { name: 'B', value: 300 },
  { name: 'C', value: 300 },
  { name: 'D', value: 200 },
  { name: 'E', value: 278 },
  { name: 'F', value: 189 },
  { name: 'G', value: 239 },
  { name: 'H', value: 349 }
];
  1. 现在,您可以在 render() 方法中使用 PieChartPie 组件来创建并呈现饼图:
render() {
  return (
    <PieChart width={400} height={400}>
      <Pie
        data={data}
        cx={200}
        cy={200}
        innerRadius={60}
        outerRadius={80}
        fill="#8884d8"
        paddingAngle={5}
        dataKey="value"
        label={renderCustomizedLabel}
      >
        {data.map((entry, index) => (
          <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />
        ))}
      </Pie>
    </PieChart>
  );
}
  • cxcy 表示饼图的中心位置。
  • innerRadiusouterRadius 表示内圆和外圆的半径。
  • fill 可以定义饼图的填充颜色。
  • paddingAngle 表示每个饼块之间的间隔。
  • dataKey 表示所使用的键名。
  • label 表示每个饼块上的标签。该方法需要返回一个 React 元素。
  1. 最后,为您的饼图添加标注。Recharts 通过 Legend 组件提供了一个容易使用的 API。
render() {
  return (
    <div>
      <PieChart width={400} height={400}>
        ...
      </PieChart>
      <Legend verticalAlign="bottom" height={36} />
    </div>
  );
}
  • verticalAlign 表示图例的垂直位置。
总结

在 ReactJS 中使用 Recharts 创建饼图非常容易。只需导入所需的组件并使用它们来配置您的饼图。您可以使用 PieChartPieCellLegend 组件来构建具有自定义样式和交互的饼图。Recharts 还提供了一些其他的组件,如 XAxis、YAxis 和 Tooltip 等,以帮助您创建更多类型的图表。

完整代码
import React, { PureComponent } from 'react';
import { PieChart, Pie, Cell, Legend } from 'recharts';

const data = [
  { name: 'A', value: 400 },
  { name: 'B', value: 300 },
  { name: 'C', value: 300 },
  { name: 'D', value: 200 },
  { name: 'E', value: 278 },
  { name: 'F', value: 189 },
  { name: 'G', value: 239 },
  { name: 'H', value: 349 }
];

const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042'];

const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent, index }) => {
  const RADIAN = Math.PI / 180;
  const radius = innerRadius + (outerRadius - innerRadius) * 0.5;
  const x = cx + radius * Math.cos(-midAngle * RADIAN);
  const y = cy + radius * Math.sin(-midAngle * RADIAN);

  return (
    <text x={x} y={y} fill="white" textAnchor="middle" dominantBaseline="central">
      {`${data[index].name} ${(percent * 100).toFixed(0)}%`}
    </text>
  );
};

class PieChartExample extends PureComponent {
  render() {
    return (
      <div>
        <PieChart width={400} height={400}>
          <Pie
            data={data}
            cx={200}
            cy={200}
            innerRadius={60}
            outerRadius={80}
            fill="#8884d8"
            paddingAngle={5}
            dataKey="value"
            label={renderCustomizedLabel}
          >
            {data.map((entry, index) => (
              <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />
            ))}
          </Pie>
        </PieChart>
        <Legend verticalAlign="bottom" height={36} />
      </div>
    );
  }
}

export default PieChartExample;

返回的markdown格式如下:

# 在 ReactJS 中使用 Recharts 创建饼图

在 ReactJS 中使用 Recharts 创建饼图是一项非常简单且显而易见的任务。Recharts 是一个基于 React 和 D3 的开源库,用于创建响应式、可组合和易于维护的数据可视化。它非常适合用于创建各种图表,包括折线图、柱形图、散点图和饼图等。

这里将介绍如何在 ReactJS 中使用 Recharts 创建饼图,并通过以下步骤详细说明。

## 步骤

1. 首先,您需要导入 \`recharts\` 包。使用以下命令进行安装:

\`\`\`bash
npm install recharts
\`\`\`

2. 然后,您需要在您的组件中导入所需的 Recharts 组件。在组件中使用以下语法:

\`\`\`jsx
import { PieChart, Pie, Cell, Legend } from 'recharts';
\`\`\`

- \`PieChart\` 组件用于创建饼图。
- \`Pie\` 组件用于绘制饼图的数据。
- \`Cell\` 组件用于定义饼图中的颜色单元格。
- \`Legend\` 组件用于定义饼图上的图例。

3. 接下来,您需要准备数据。饼图需要一个表示比例的数字数组和一个表示每个比例的名称的字符串数组。以下是一个示例数据:

\`\`\`js
const data = [
  { name: 'A', value: 400 },
  { name: 'B', value: 300 },
  { name: 'C', value: 300 },
  { name: 'D', value: 200 },
  { name: 'E', value: 278 },
  { name: 'F', value: 189 },
  { name: 'G', value: 239 },
  { name: 'H', value: 349 }
];
\`\`\`

4. 现在,您可以在 \`render()\` 方法中使用 \`PieChart\` 和 \`Pie\` 组件来创建并呈现饼图:

\`\`\`jsx
render() {
  return (
    <PieChart width={400} height={400}>
      <Pie
        data={data}
        cx={200}
        cy={200}
        innerRadius={60}
        outerRadius={80}
        fill="#8884d8"
        paddingAngle={5}
        dataKey="value"
        label={renderCustomizedLabel}
      >
        {data.map((entry, index) => (
          <Cell key={\`cell-\${index}\`} fill={COLORS[index % COLORS.length]} />
        ))}
      </Pie>
    </PieChart>
  );
}
\`\`\`

- \`cx\` 和 \`cy\` 表示饼图的中心位置。
- \`innerRadius\` 和 \`outerRadius\` 表示内圆和外圆的半径。
- \`fill\` 可以定义饼图的填充颜色。
- \`paddingAngle\` 表示每个饼块之间的间隔。
- \`dataKey\` 表示所使用的键名。
- \`label\` 表示每个饼块上的标签。该方法需要返回一个 React 元素。

5. 最后,为您的饼图添加标注。Recharts 通过 \`Legend\` 组件提供了一个容易使用的 API。

\`\`\`jsx
render() {
  return (
    <div>
      <PieChart width={400} height={400}>
        ...
      </PieChart>
      <Legend verticalAlign="bottom" height={36} />
    </div>
  );
}
\`\`\`

- \`verticalAlign\` 表示图例的垂直位置。

## 总结

在 ReactJS 中使用 Recharts 创建饼图非常容易。只需导入所需的组件并使用它们来配置您的饼图。您可以使用 \`PieChart\`、\`Pie\`、\`Cell\` 和 \`Legend\` 组件来构建具有自定义样式和交互的饼图。Recharts 还提供了一些其他的组件,如 XAxis、YAxis 和 Tooltip 等,以帮助您创建更多类型的图表。

## 完整代码

\`\`\`jsx
import React, { PureComponent } from 'react';
import { PieChart, Pie, Cell, Legend } from 'recharts';

const data = [
  { name: 'A', value: 400 },
  { name: 'B', value: 300 },
  { name: 'C', value: 300 },
  { name: 'D', value: 200 },
  { name: 'E', value: 278 },
  { name: 'F', value: 189 },
  { name: 'G', value: 239 },
  { name: 'H', value: 349 }
];

const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042'];

const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent, index }) => {
  const RADIAN = Math.PI / 180;
  const radius = innerRadius + (outerRadius - innerRadius) * 0.5;
  const x = cx + radius * Math.cos(-midAngle * RADIAN);
  const y = cy + radius * Math.sin(-midAngle * RADIAN);

  return (
    <text x={x} y={y} fill="white" textAnchor="middle" dominantBaseline="central">
      {`${data[index].name} ${(percent * 100).toFixed(0)}%`}
    </text>
  );
};

class PieChartExample extends PureComponent {
  render() {
    return (
      <div>
        <PieChart width={400} height={400}>
          <Pie
            data={data}
            cx={200}
            cy={200}
            innerRadius={60}
            outerRadius={80}
            fill="#8884d8"
            paddingAngle={5}
            dataKey="value"
            label={renderCustomizedLabel}
          >
            {data.map((entry, index) => (
              <Cell key={`cell-\${index}`} fill={COLORS[index % COLORS.length]} />
            ))}
          </Pie>
        </PieChart>
        <Legend verticalAlign="bottom" height={36} />
      </div>
    );
  }
}

export default PieChartExample;
\`\`\`