recharts中饼图提供cornerRadius后如何加入

How to join after cornerRadius is provided for piecharts in recharts

我正在使用 recharts,我正在尝试创建一个饼图,其中只有图表边缘的半径。我得到的是以下内容。与此 fiddle 中的类似。

<PieChart width={800} height={400} onMouseEnter={this.onPieEnter}>

    <Pie
      data={data} 
      cx={420} 
      cy={200} 
      startAngle={180}
      endAngle={0}
      cornerRadius={40}
      innerRadius={60}
      outerRadius={80} 
      data={data}
     fill="#8884d8"
    />
  </PieChart>

如您所见,角半径已添加到每个数据元素中。想要的是像下图这样的东西。 (抱歉我的编辑技术不好)

recharts 中有这样的可能吗?

如果不是总价值之类的东西对我也有用。我的意思是假设图表中显示的总值为 100,我提供的数据为 50。然后 50% 的数据在图表中显示为某种颜色,而重置的 50% 显示为灰色。

有一种可能的方法如下, 您可以将名为 paddingAngle={0} 的道具传递给 PieChart 组件。找到下面的代码。

<Pie
      data={data} 
      cx={120} 
      cy={200} 
      innerRadius={60}
      outerRadius={80} 
      fill="#8884d8"
      paddingAngle={0}
    >
        {
        data.map((entry, index) => <Cell fill={COLORS[index % COLORS.length]}/>)
      }
    </Pie>

您将获得的结果如下图所示

来源fiddle:https://jsfiddle.net/vkpwm2st/

有解决此问题的方法,它将帮助您解决问题。我会建议您创建 2 个馅饼:one with rounded cornersone with pointed corners。并让所有数据保持相同

  • 对于尖角,使它们的颜色透明,除了索引 0 和长度 - 1
  • 对于圆角,做相反的事情

你会得到这样的输出:

这是相同的 JS fiddle:https://jsfiddle.net/kmfby50o/

视觉上你会看到你想要的。对于 onClick 等功能,将其应用于第二个 <Pie>。由于它与第一个重叠,因此也将得到处理。

const { PieChart, Pie, Sector, Cell } = Recharts;
const data = [{ name: 'Group A', value: 400 }, { name: 'Group B', value: 300 },
{ name: 'Group C', value: 300 }, { name: 'Group D', value: 200 }];
const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042'];

const RADIAN = Math.PI / 180;

const SimplePieChart = React.createClass({
    render() {
        return (
            <PieChart width={800} height={400} onMouseEnter={this.onPieEnter}>

                <Pie
                    data={data}
                    cx={420}
                    cy={200}
                    startAngle={180}
                    endAngle={0}
                    cornerRadius={40}
                    innerRadius={60}
                    outerRadius={80}
                    fill="#8884d8"
                    paddingAngle={-5}
                >
                    {
                        data.map((entry, index) => <Cell fill={index === 0 || index === data.length - 1 ? COLORS[index % COLORS.length] : 'transparent'} />)
                    }
                </Pie>
                <Pie
                    data={data}
                    cx={420}
                    cy={200}
                    startAngle={180}
                    endAngle={0}
                    cornerRadius={0}
                    innerRadius={60}
                    outerRadius={80}
                    fill="#8884d8"
                >
                    {
                        data.map((entry, index) => <Cell fill={index === 0 || index === data.length - 1 ? 'transparent' : COLORS[index % COLORS.length]} />)
                    }
                </Pie>
            </PieChart>
        );
    }
})

ReactDOM.render(
    <SimplePieChart />,
    document.getElementById('container')
);

希望对您有所帮助。如有任何疑问,请回复。