Rechart——给图表添加标签
Rechart - adding labels to charts
我正在尝试学习如何使用 Rechart。该文档说您可以在图表元素上放置标签,并举例说明如何使用 'name' 作为标签数据键。
我已经尝试在我的图表中这样做,但它不起作用。
如果我从字段中删除 'label',则不会显示任何标签。如果我保留它,那么唯一显示的标签就是饼图楔形上的值。
我有一个数据键为 'name' 的标签(根据文档),但它没有呈现在图表上。
import React, { PureComponent } from 'react';
import {
ResponsiveContainer, PieChart, Pie, Legend, Label, LabelList
} from 'recharts';
const data = [
{ name: 'Group A', value: 400 }, { name: 'Group B', value: 300 },
{ name: 'Group C', value: 300 }, { name: 'Group D', value: 200 },
];
export default class Example extends PureComponent {
static jsfiddleUrl = '//jsfiddle.net/alidingling/6okmehja/';
render() {
return (
<div style={{ width: '100%', height: 300 }}>
<ResponsiveContainer>
<PieChart>
<Pie dataKey="value"
data={data}
fill="#8884d8"
Label dataKey="name"
/>
</PieChart>
</ResponsiveContainer>
</div>
);
}
}
如何给饼图添加标签?
抱歉耽搁了,我终于想出了一个解决方案,即使它不是很简单
const {ResponsiveContainer, PieChart, Pie, Legend} = Recharts;
const data = [{name: 'Group A', value: 400}, {name: 'Group B', value: 300},
{name: 'Group C', value: 300}, {name: 'Group D', value: 200}]
const RADIAN = Math.PI / 180;
const renderCustomizedLabel = ({
x, y, name
}) => {
return (
<text x={x} y={y} fill="black" textAnchor="end" dominantBaseline="central">
{name}
</text>
);
};
const SimplePieChart = React.createClass({
render () {
return (
<ResponsiveContainer>
<PieChart>
<Pie data={data} fill="#8884d8" label={renderCustomizedLabel} nameKey="name"/>
</PieChart>
</ResponsiveContainer>
);
}
})
ReactDOM.render(
<SimplePieChart />,
document.getElementById('container')
);
对于其他寻求答案的人来说,这很有效:
定义一个函数来按照您想要的方式呈现标签,例如:
let renderLabel = function(entry) {
return entry.name;
}
将 label 属性设置为指向您的函数:
<Pie label={renderLabel} [ you other properties ]>
[ your content ]
</Pie>
您可以在 http://recharts.org/en-US/examples/PieChartWithCustomizedLabel
中找到 PieChartWithCustomizedLabel 的示例
或以下代码将帮助您
import React, { PureComponent } from 'react';
import {
PieChart, Pie, Sector, Cell,
} from '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 renderCustomizedLabel = ({
cx, cy, midAngle, innerRadius, outerRadius, percent, index,
}) => {
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={x > cx ? 'start' : 'end'} dominantBaseline="central">
{`${(percent * 100).toFixed(0)}%`}
</text>
);
};
export default class Example extends PureComponent {
static jsfiddleUrl = 'https://jsfiddle.net/alidingling/c9pL8k61/';
render() {
return (
<PieChart width={400} height={400}>
<Pie
data={data}
cx={200}
cy={200}
labelLine={false}
label={renderCustomizedLabel}
outerRadius={80}
fill="#8884d8"
dataKey="value"
>
{
data.map((entry, index) => <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />)
}
</Pie>
</PieChart>
);
}
}
此处演示 - link
我正在尝试学习如何使用 Rechart。该文档说您可以在图表元素上放置标签,并举例说明如何使用 'name' 作为标签数据键。
我已经尝试在我的图表中这样做,但它不起作用。
如果我从字段中删除 'label',则不会显示任何标签。如果我保留它,那么唯一显示的标签就是饼图楔形上的值。
我有一个数据键为 'name' 的标签(根据文档),但它没有呈现在图表上。
import React, { PureComponent } from 'react';
import {
ResponsiveContainer, PieChart, Pie, Legend, Label, LabelList
} from 'recharts';
const data = [
{ name: 'Group A', value: 400 }, { name: 'Group B', value: 300 },
{ name: 'Group C', value: 300 }, { name: 'Group D', value: 200 },
];
export default class Example extends PureComponent {
static jsfiddleUrl = '//jsfiddle.net/alidingling/6okmehja/';
render() {
return (
<div style={{ width: '100%', height: 300 }}>
<ResponsiveContainer>
<PieChart>
<Pie dataKey="value"
data={data}
fill="#8884d8"
Label dataKey="name"
/>
</PieChart>
</ResponsiveContainer>
</div>
);
}
}
如何给饼图添加标签?
抱歉耽搁了,我终于想出了一个解决方案,即使它不是很简单
const {ResponsiveContainer, PieChart, Pie, Legend} = Recharts;
const data = [{name: 'Group A', value: 400}, {name: 'Group B', value: 300},
{name: 'Group C', value: 300}, {name: 'Group D', value: 200}]
const RADIAN = Math.PI / 180;
const renderCustomizedLabel = ({
x, y, name
}) => {
return (
<text x={x} y={y} fill="black" textAnchor="end" dominantBaseline="central">
{name}
</text>
);
};
const SimplePieChart = React.createClass({
render () {
return (
<ResponsiveContainer>
<PieChart>
<Pie data={data} fill="#8884d8" label={renderCustomizedLabel} nameKey="name"/>
</PieChart>
</ResponsiveContainer>
);
}
})
ReactDOM.render(
<SimplePieChart />,
document.getElementById('container')
);
对于其他寻求答案的人来说,这很有效:
定义一个函数来按照您想要的方式呈现标签,例如:
let renderLabel = function(entry) {
return entry.name;
}
将 label 属性设置为指向您的函数:
<Pie label={renderLabel} [ you other properties ]>
[ your content ]
</Pie>
您可以在 http://recharts.org/en-US/examples/PieChartWithCustomizedLabel
中找到 PieChartWithCustomizedLabel 的示例或以下代码将帮助您
import React, { PureComponent } from 'react';
import {
PieChart, Pie, Sector, Cell,
} from '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 renderCustomizedLabel = ({
cx, cy, midAngle, innerRadius, outerRadius, percent, index,
}) => {
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={x > cx ? 'start' : 'end'} dominantBaseline="central">
{`${(percent * 100).toFixed(0)}%`}
</text>
);
};
export default class Example extends PureComponent {
static jsfiddleUrl = 'https://jsfiddle.net/alidingling/c9pL8k61/';
render() {
return (
<PieChart width={400} height={400}>
<Pie
data={data}
cx={200}
cy={200}
labelLine={false}
label={renderCustomizedLabel}
outerRadius={80}
fill="#8884d8"
dataKey="value"
>
{
data.map((entry, index) => <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />)
}
</Pie>
</PieChart>
);
}
}
此处演示 - link