首页 > 其他分享 >react使用echart绘制大饼图

react使用echart绘制大饼图

时间:2023-01-18 10:58:52浏览次数:47  
标签:paramsNameNumber const echart receiveEchartResource 大饼 react let elink

需求: 封装echart-option,手动实现下载png图片功能(echart提供的saveImage由于不能控制位置,故弃用)

除echart-option以外的配置

//resource:array echart渲染依赖的数组, title:string 保存图片时的文件名
function MajorBar(resource,title){
  if (!Array.isArray(receiveEchartResource) || Array.isArray(receiveEchartResource) && receiveEchartResource.length < 1) return
    const divRef = useRef()  //echart dom
    const [imgSrc, setImgSrc] = useState('')  //图片地址,需要ehcart返回 
    useEffect(() => {}
      if (!divRef.current) return
      // 这里配置options,放到第二步来写
          const option = {
              ....第二步来写 
          }
      //
      // 初始化mychart,过程详见上一文章
        const myChart = echarts.getInstanceByDom(divRef.current) ?? echarts.init(divRef.current, ECHARTS_THEME)
        myChart.setOption(option)
        window.onresize = () => {
            myChart.resize()
        }
       // 获取图片路径,返回base64码
        setImgSrc(myChart.getDataURL('png'))
    },[receiveEchartResource])  //监听receiveEchartResource变化,


  //配置下载图片,本质是使用js动态创建a链接实现下载
  const saveAsImage=(title,imgSrc)=>{
      const elink = document.createElement('a')
    elink.download = title
    elink.style.display = 'none'
    elink.href = imgSrc
    document.body.appendChild(elink)
    elink.click()
    URL.revokeObjectURL(elink.href) // 释放URL 对象
    document.body.removeChild(elink)
  }

//有时候由于echart渲染图表太多,可能需要使用横向滚动条,因而,需要给echart容器开启**横向滚动**
return <>
      <div ref={divRef} style={{
                height: "440px", overflowX: 'scroll',/* 定义超出此盒子横向滚动 */
                overflowY: 'hidden'
            }}  >
            </div>

<>
}

option详细配置

/***
大饼图的基础配置有以下几点,
xAxis:表示横轴
series中的data表示纵向数据,type标识图表的类型
值得一提的是yAxis不表示纵向数据,牢记
有时候横轴数据个体字数可能太多,所以需要使用`formmat`进行折行处理
***/
const option = {
//横轴
 xAxis: {
    type: 'category',
     data: receiveEchartResource.map(v => v.spec_name),
     //折行处理 使用formmat
     axisLabel: {
      show: true,
      color: '#00000073',
      fontSize: 12,
      interval: 0,
      formatter: (params) => {
        //粘贴以下function内未注释的代码
        let newParamsName = ''
        let paramsNameNumber = params.length
        if (paramsNameNumber > 14) {
          paramsNameNumber = 14
        }
        let provideNumber = 5
        let rowNumber = Math.ceil(paramsNameNumber / provideNumber)
        if (paramsNameNumber > provideNumber) {
          for (var p = 0; p < rowNumber; p++) {
            let tempStr = ''
            let start = p * provideNumber
            let end = start + provideNumber
            if (p == rowNumber - 1) {
              tempStr = params.substring(start, paramsNameNumber)
            } else {
              tempStr = params.substring(start, end) + '\n'
            }
            newParamsName += tempStr
          }
        } else {
          newParamsName = params
        }
        return newParamsName
      },
      textStyle: {
        lineHeight: 16,
      },
    },
},
//此配置不代表纵轴数据
  yAxis: {
      type: 'value'
},
//data标识纵轴数据,type标识图表类型
series: [{
    data: [100, 150, 120, 90, 50, 130, 110],
    type: 'bar',
    // 显示字段label
    label: {
        show: true,
        position: 'top'
    },

}],
}


以上

标签:paramsNameNumber,const,echart,receiveEchartResource,大饼,react,let,elink
From: https://www.cnblogs.com/hjk1124/p/17059321.html

相关文章

  • React Hook学习笔记
    函数组件基本使用及点标记组件写法函数组件的基本使用函数组件是比类组件编写起来更简单的一种组件形式,对比如下://类组件classWelcomeextendsReact.Component{......
  • React-tree-biuld bug2.0
    import{Tree,Button,Card}from'antd';import{useEffect,useState}from'react';import'./App.css'constflattren=(treeData)=>{letres=[]con......
  • React与TS的配合
    React与TS配合props限制npxcreate-react-appreact-ts-study--templatetypescriptsrc/index.tsximportAppfrom'./01_react-ts-props';src/01_react-ts-props.......
  • React路由与RTK的使用
    ReactRouter与ReduxReactRouterV6.4npmireact-router-domnpminstallsasssrc/App.js//importlogofrom'./logo.svg';import'./App.css';import{Link,Ou......
  • 安装react脚手架,运行
    npmuninstallcreate-react-app-g(以前创建过脚手架的话先进行卸载再重新安装以适配最新版本此步骤可逃过失败也是正常现象)npminstallcreate-react-app-g安装脚手......
  • React:开发者工具谷歌插件下载安装
    React:开发者工具谷歌插件最近学习前端react主要是想大概浏览一下,这里提供尚硅谷的是视屏资料中的谷歌插件的下载。(如有侵权联系删除)这里提供我的下载地址,其中除了插件,还有......
  • ECharts 仪表盘 实现进度条渐变色,但数据轴渐变颜色范围固定
    需求实现渐变色的仪表盘,进度条为渐变色,但整个数据轴的颜色范围固定,如下两图:难点该需求难点在于,正常思路配置仪表盘时,为数据设置渐变色,渐变范围是从起点到数据值(如下图......
  • 自定义react项目脚手架
    呀呀呀呀,快过年啦,开心!而且之前一直想做的2个事,一个从0到1自定义开发ui组件库(从0到1开发一个自己的ui库)已经做好啦,还有一个做个自定义的脚手架,现在也做好啦。2个flag完成,开......
  • Vue+echart 展示后端获取的数据
    最近在合作做一个前后端分离项目时,为了测试我写的后端部分获取数据的效果,自己也学了一下vue的知识,在获取json信息这里也踩了很多坑。这里列举下我返回的json部分信......
  • React: 路由重定向
    解决方案参考链接https://v5.reactrouter.com/web/example/route-config......