bizcharts饼图Legend显示数值和百分比

本文档展示了如何在BizCharts库中利用Legend的itemValue属性和formatter函数,来格式化饼图图例,使其显示每个类别的百分比。通过计算总和并应用Math.round函数,可以精确地呈现每个值相对于总和的比例。
摘要由CSDN通过智能技术生成
效果图

在这里插入图片描述

百分比

官网API:https://www.bizcharts.net/product/BizCharts4/category/62/page/81#itemvalue
itemValueLegend设置配置图例value的属性,我们可以再formatter函数中设置我们想要显示的值。
在这里插入图片描述
打印formatter中(text: string, item: ListItem, index: number)对应的值,我们可以用index获取当前对应的value值const tarValue = chartList[index].value;
在这里插入图片描述

itemValue={{
	formatter: (_text: string, _item: any, index: number) => {
	     console.log(_item,'_item--',_text, index)
	     const data = chartList;
	     let total = 0;
	     const tarValue = chartList[index].value;
	     for (let i = 0; i < data.length; i++) {
	       total += data[i].value;
	     }
	     const p = Math.round((tarValue / total) * 100);
	     return `${p}%`;
	   },
	   style: {
	     fill: '#1A1A1A',
	   },
	 }}
完整代码
import React from 'react';
import { Chart, Coordinate, Tooltip, Axis, Interval, Annotation, Legend } from 'bizcharts';

type IChartsProps = {
  store: any;
};
const chartList = [
  {
    "type": "A",
    "value": 1
  },
  {
    "type": "B",
    "value": 20
  },
  {
    "type": "C",
    "value": 4
  },
  {
    "type": "D",
    "value": 8
  },
];

const Charts: React.FC<IChartsProps> = ({ store }) => (
  <div>
    <div style={{ textAlign: 'center' }}>
      <Chart height={300} padding={[0, 150, 0, 0]} data={chartList} autoFit>
        <Coordinate type="theta" radius={0.65} innerRadius={0.77} />
        <Tooltip showTitle={false} />
        <Axis visible={false} />
        <Legend
          position="right"
          offsetX={-80}
          itemHeight={18}
          itemName={{
            formatter: (text: string) => `${text}`,
            style: {
              fill: '#8D8E99',
            },
          }}
          itemValue={{
            formatter: (_text: string, _item: any, index: number) => {
              // 百分比显示
              const data = chartList;
              let total = 0;
              const tarValue = chartList[index].value;
              for (let i = 0; i < data.length; i++) {
                total += data[i].value;
              }
              const p = Math.round((tarValue / total) * 100);
              return `${p}%`;
            },
            style: {
              fill: '#1A1A1A',
            },
          }}
        />
        <Annotation.Text
          position={['50%', '46%']}
          content={chartList.map(item => item.value).reduce((a, b) => a + b, 0)}
          style={{
            lineHeight: 40,
            fontSize: 22,
            fontWeight: 700,
            fill: '#1A1A1A',
            textAlign: 'center',
          }}
        />
        <Annotation.Text
          position={['50%', '57%']}
          content="数量"
          style={{
            lineHeight: 20,
            fontSize: 12,
            fill: '#8D8E99',
            textAlign: 'center',
          }}
        />
        <Interval
          position="value"
          adjust="stack"
          color="type"
          style={{
            lineWidth: 1,
            stroke: '#fff',
          }}
        />
      </Chart>
    </div>
  </div>
);
export default Charts;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值