chartjs(react-chartjs-2) 饼状图添加百分比显示

2 篇文章 0 订阅
2 篇文章 0 订阅

框架react 

import React from 'react';
import {Pie} from 'react-chartjs-2';

const data = {
	labels: [
		'1Red',
		'2pit',
		'3Yel',
		'4Ye',
		'5Ye',
		'6Ye',
		'7Y',
		'8Y',
		'9Yel',
		'10Ye',
		'11Y',
		'12Ye',
		
	],
	datasets: [{
		data: [300, 50, 289,100,89,90,100,44,254,456,88,874],
		backgroundColor: [
			"#ff6384","#36a2eb","#ffce56","#00ffff","#0000ff","#a52a2a","#00008b","#008b8b","#a9a9a9","#006400","#bdb76b","#8b008b","#556b2f","#ff8c00","#9932cc","#8b0000","#e9967a","#9400d3","#ff00ff", "#ffd700","#008000","#4b0082","#f0e68c","#add8e6","#90ee90", "#d3d3d3","#ffb6c1","#00ff00","#ff00ff","#800000","#000080","#808000","#ffa500","#ffc0cb","#800080","#800080","#ff0000","#c0c0c0","#ffff00"
		],
		hoverBackgroundColor: [
			"#ff6384","#36a2eb","#ffce56","#00ffff","#0000ff","#a52a2a","#00008b","#008b8b","#a9a9a9","#006400","#bdb76b","#8b008b","#556b2f","#ff8c00","#9932cc","#8b0000","#e9967a","#9400d3","#ff00ff", "#ffd700","#008000","#4b0082","#f0e68c","#add8e6","#90ee90", "#d3d3d3","#ffb6c1","#00ff00","#ff00ff","#800000","#000080","#808000","#ffa500","#ffc0cb","#800080","#800080","#ff0000","#c0c0c0","#ffff00"
		],
		borderWidth:0
		
	}]
};
const lineOptions ={
	maintainAspectRatio: true,
	tooltips: {
		enabled: true,
		callbacks: {
			label: function (tooltipItem, data) {
				
				var dataset = data.datasets[tooltipItem.datasetIndex];
				var total = dataset.data.reduce(function (previousValue, currentValue, currentIndex, array) {
					return previousValue + currentValue;
				});
				var currentValue = dataset.data[tooltipItem.index];
				var percentage = Math.floor(((currentValue / total) * 100) + 0.5);
				return percentage + "%";
			},                    
			title: function (tooltipItem, data) {
				return data.labels[tooltipItem[0].index];
			},
			
			
		},
		
	},
  legend: {
	display: false,
  },
  layout: {
	padding: {
		left: 0,
		right: 0,
		top:50,
		bottom:20
	}
  },
  animation: {
	duration: 1,
	onComplete: function () {
		var chartInstance = this.chart,radian = 0,tmpRadian,middleRadian,
		ctx = chartInstance.ctx;
		Chart.defaults.global.defaultFontSize = 12 ;
		Chart.defaults.global.defaultFontFamily = 'PingFangTC';
		Chart.defaults.global.defaultFontStyle = '400';
		ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
		ctx.textAlign = 'center';
		ctx.textBaseline = 'bottom';

		this.data.datasets.forEach(function (dataset, i) {
			var meta = chartInstance.controller.getDatasetMeta(i);
			meta.data.forEach(function (bar, index) {
				var data = dataset.data[index],x,y,r,dataPercentage,canvasWidth,canvasHeight,dataName,centerAngle;  
				r = (chartInstance.chartArea.bottom-chartInstance.chartArea.top)/2+20;
				//弧長
				centerAngle = bar._model.circumference;
				// 中間弧度
				radian = radian + centerAngle;
				tmpRadian = radian;
				middleRadian = tmpRadian - centerAngle/2
				// x、y坐標
				canvasWidth = bar._chart.chartArea.right
				canvasHeight = bar._chart.chartArea.bottom 
				x = canvasWidth/2 + Math.sin(middleRadian) * r ;
				y = (canvasHeight+60)/2 -  Math.cos(middleRadian) * r ;
				//百分比
				dataPercentage =  Math.floor(((data/meta.total) * 100) + 0.5)
				dataName = bar._model.label
				ctx.fillStyle = '#222'
				ctx.fillText(dataName+':'+dataPercentage+'%',x,y,50);
							
			});
		});             
	}
}
  
	
}

export default React.createClass({
  displayName: 'PieExample',

  render() {
    return (
      <div>
        {/* <h2>Pie Example 111</h2> */}
        <Pie data={data} 
			options={lineOptions}
		/>
      </div>
    );
  }
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值