创建具有圆角边缘的Rechart条形图

时间:2019-03-21 16:57:22

标签: javascript reactjs recharts

enter image description here

我正在尝试创建一个这样的条形图,其中条形图的长度为X,并且条形图的每个段的长度与其所包含的数据的百分比成比例。通过创建垂直布局堆叠的条形图,我已经很接近了,但是无法弄清楚如何获得圆形边缘。我已经在border={x}组件上尝试过Bar,但是这使条形的两边都变圆了,而我只想使第一个条形的左侧和第二个条形的右侧变圆。有什么建议吗?还是我可能会使用错误的组件来解决这个问题?

这是我到目前为止的内容,以及结果的屏幕截图。

const {BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend} = Recharts;
const data = [
      {name: '1', a: 50, b: 20, c: 10},
];
const StackedBarChart = React.createClass({
  render () {
  	return (
    	<BarChart layout="vertical" width={600} height={50} data={data}
            margin={{top: 20, right: 30, left: 20, bottom: 5}}>
       <XAxis hide  type="number"/>
       <YAxis hide dataKey="name" type="category"/>
       <Tooltip />
       <Bar dataKey="a" stackId="a" fill="#8884d8" radius={20} />
       <Bar dataKey="b" stackId="a" fill="#8884d8" />
       <Bar dataKey="c" stackId="a" fill="black" radius={20}/>
      </BarChart>
    );
  }
})

ReactDOM.render(
  <StackedBarChart />,
  document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.2/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.6.2/react-dom.min.js"></script>
<script src="https://unpkg.com/recharts/umd/Recharts.min.js"></script>
<div id="container">
  <!-- This element's contents will be replaced with your component. -->
</div>

不确定为什么该代码段不起作用,所以这里是JSFiddle https://jsfiddle.net/nur2t39y/

enter image description here

1 个答案:

答案 0 :(得分:2)

我发现了一个Github问题,展示了一个为radius道具使用数组的示例,它允许您为条形图的每个角指定半径。 https://github.com/recharts/recharts/issues/793

这是新的有效代码以及结果的屏幕截图

const {BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend} = Recharts;
const data = [
      {name: '1', a: 50, b: 20, c: 10},
];
const StackedBarChart = React.createClass({
	render () {
  	return (
    	<BarChart layout="vertical" width={600} height={50} data={data}
            margin={{top: 20, right: 30, left: 20, bottom: 5}}>
       <XAxis hide  type="number"/>
       <YAxis hide dataKey="name" type="category"/>
       <Tooltip />
       <Bar dataKey="a" stackId="a" fill="#8884d8" radius={[10, 0, 0, 10]}/>
       <Bar dataKey="b" stackId="a" fill="#82ca9d" />
       <Bar dataKey="c" stackId="a" fill="black" radius={[0, 10, 10, 0]}/>
      </BarChart>
    );
  }
})

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

enter image description here