当前位置: 首页 > news >正文

React AntV/G2Plot环形图Pie添加点击事件,即点击图环触发获取相关数据。

 

步骤:

1、添加相关依赖,引入AntV/G2Plot图表组件

2、添加配置项

3、添加点击事件方法(关键部分:在onReady={onReadyPie},onReady是图表渲染完成执行回调方法,在该方法中获取chart对象plot,在plot上通过on绑定相关事件)代码片段如下:

/**
         * 添加环形图点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element
         * @param plot 在 Plot 上通过 on 绑定事件、off 移除绑定事件。
         * @author QC
         * @since 20220926
         * @version V1.0
         */
        const onReadyPie = (plot) => {
            // 图表的点击事情,可参考文档添加其它事件,https://charts.ant.design/zh/examples/pie/donut#basic
            plot.on('element:click', (...args) => {
                const pieData = args[0].data?.data
                console.log(args)
                console.log('pieData')
                console.log(pieData)
                this.onOpenView(pieData?.indexName)
            })
        }
        return (
            <div>
                <div>{data?.length > 0 ? <Pie {...config} onReady={onReadyPie} /> : <Empty />}</div>
            </div>
        )

 

 

4、引用图表

下例中该React组件是用类组件写的,不过不影响使用,完整代码如下:

import React, { Component } from 'react'
import { G2, Pie } from '@ant-design/plots'
import { Empty } from 'antd'
/**
 * 饼状图
 *
 * @author QC
 * @since 20220719
 * @version V1.0
 */
class Index extends Component {
	constructor(props) {
		super(props)
		this.state = {}
	}

	componentDidMount() {
		this.loadData()
	}

	/**
	 * 加载数据方法
	 */
	loadData = () => {}
  
	/**
	 * 显示弹框方法
	 */
	onOpenView = (type) => {
    console.log(type)
  }
  
	render() {
		const data = []
		const G = G2.getEngine('canvas')
		const config = {
			appendPadding: 10,
			data,
			angleField: 'number',
			colorField: 'indexName',
			radius: 0.8,
			innerRadius: 0.7,
			legend: false,
			tooltip: {
				showMarkers: false,
				formatter: (obj) => {
					// 格式化提示
					return {
						name: `<span style="color: #0F1348">${obj.indexName}</span>`,
						value: `<span style="color: #0F1348">${obj.number}次</span>`,
					}
				},
			},
			label: {
				type: 'spider',
				style: {
					fill: 'black',
					opacity: 1,
					fontSize: 14,
				},
				labelHeight: 40,
				formatter: (obj, mappingData) => {
					const group = new G.Group({})
					group.addShape({
						type: 'circle',
						attrs: {
							x: 0,
							y: 0,
							width: 40,
							height: 50,
							r: 5,
							fill: mappingData.color,
						},
					})
					group.addShape({
						type: 'text',
						attrs: {
							x: 10,
							y: 8,
							text: `${obj.indexName}`,
							fill: mappingData.color === '#5D7092' ? '#ffffff' : mappingData.color, // 把默认灰色改为白色方便查看
							fontWeight: 900, // 环形外标签字体粗细
							fontSize: 14, // 环形外标签字体大小
						},
					})
					group.addShape({
						type: 'text',
						attrs: {
							x: 0,
							y: 25,
							text: `${obj.number}次`,
							fill: 'rgba(165, 231, 241, 1)',
							fontWeight: 900, // 环形外标签字体粗细
							fontSize: 14, // 环形外标签字体大小
						},
					})
					return group
				},
			},
			statistic: false,
			interactions: [
				{
					type: 'element-selected',
				},
				{
					type: 'element-active',
				},
				{
					type: 'element:click',
				},
			],
		}
		/**
		 * 添加环形图点击事件, element 代表图形元素,关于图形元素,请查看:https://g2.antv.vision/zh/docs/manual/concepts/element
		 * @param plot 在 Plot 上通过 on 绑定事件、off 移除绑定事件。
		 * @author QC
		 * @since 20220926
		 * @version V1.0
		 */
		const onReadyPie = (plot) => {
			// 图表的点击事情,可参考文档添加其它事件,https://charts.ant.design/zh/examples/pie/donut#basic
			plot.on('element:click', (...args) => {
				const pieData = args[0].data?.data
				console.log(args)
				console.log('pieData')
				console.log(pieData)
				this.onOpenView(pieData?.indexName)
			})
		}
		return (
			<div>
				<div>{data?.length > 0 ? <Pie {...config} onReady={onReadyPie} /> : <Empty />}</div>
			</div>
		)
	}
}
export default Index

其他详细配置请看官方文档:

1、 环图 | Ant Design Charts

2、图表 - Chart | G2

参考文献:

1、react antv(Ant Design Charts)怎么使用图表事件_南城夏季的博客-CSDN博客

相关文章:

  • 导航【Java设计模式】
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • JavaScript4种数组随机选取实战源码
  • Python 教程之 Numpy(1)—— 什么是 Numpy?
  • $refs 、$nextTic、动态组件、name的使用
  • C语言实现简单通讯录,malloc,calloc,realloc,free动态内存分配的学习。
  • 【新人报到】【学习笔记】Python编程——入门
  • 【金融】中国vix、skew指数的Python实现
  • 外汇天眼:英镑暴跌英国国债暴跌 英国新政府宣布激进的减税促经济计划
  • 基于React的富文本编辑器——Braft Editor使用
  • vue项目docker打包通过k8s
  • 论文教程之阅读科学论文11步法,详细介绍了每个部分的关注点
  • [云原生] [kubernetes] 基于K8S安装kubesphere
  • docker部署服务初体验
  • 每日学一个设计模式23——解释器模式
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 2017 年终总结 —— 在路上
  • Android Volley源码解析
  • C++类的相互关联
  • FineReport中如何实现自动滚屏效果
  • HTTP中GET与POST的区别 99%的错误认识
  • jQuery(一)
  • laravel5.5 视图共享数据
  • linux学习笔记
  • nginx 配置多 域名 + 多 https
  • PHP那些事儿
  • Redis在Web项目中的应用与实践
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • webpack4 一点通
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 理解在java “”i=i++;”所发生的事情
  • 判断客户端类型,Android,iOS,PC
  • 前端性能优化——回流与重绘
  • 小程序开发中的那些坑
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # Java NIO(一)FileChannel
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • ( 10 )MySQL中的外键
  • (003)SlickEdit Unity的补全
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (九)信息融合方式简介
  • (转)编辑寄语:因为爱心,所以美丽
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net 4.0发布后不能正常显示图片问题
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET DataGridView数据绑定说明
  • .NET Framework与.NET Framework SDK有什么不同?