ECharts 问题

微调样式

1.鼠标滑动图表上面有显示(tooltip)

图例
在这里插入图片描述

title: {
    
    
     text: '大厅业务办件情况',
     subtext: '',
      },
//提示框取默认值,即鼠标移动到柱状图会显示内容(关键点)
tooltip: {
    
    
    trigger: 'item'
}

这里涉及一个“trigger”值(axis和item)的知识点,参考文档
【1】https://blog.csdn.net/qq_42462993/article/details/125296566 (注意这里讲的的柱状、折线图)
饼图不要用“axis”

//提示框取默认值,即鼠标移动到柱状图会显示内容
tooltip: {
    
    
    trigger: 'axis', 
    //触发类型;轴触发,
    //axis则鼠标hover到一条柱状图显示全部数据,
    //item则鼠标hover到折线点显示相应数据,
    axisPointer: {
    
      //坐标轴指示器,坐标轴触发有效,
        type: 'line', //默认为line,line直线,cross十字准星,shadow阴影
		crossStyle: {
    
    
            color: '#fff'
		}
	}
}

2.柱形图上方显示vaule值(label)

图例
在这里插入图片描述

        series: [
          {
    
    
            name: '业务量',
            type: 'bar',
            data: dataList,
            itemStyle: {
    
    
              normal: {
    
    
                label: {
    
    
                  show: true, //关键点开启显示
                  position: 'right', //top上方;left左侧;right右方显示
                  // textStyle: { //数值样式
                  //   color: 'black',
                  //   fontSize: 12
                  // }
                }
              }
            }
          },
        ]

3.饼图-中间文字、图层含百分比

图例
在这里插入图片描述
就是弄几个一模一样的 对象,其中的 label 样式不同
知识点:模板变量有 {a}、{b}、{c}、{d},分别表示系列名,数据名,数据值,百分比。{d}数据会根据value值计算百分比
相关代码

series: [
         //饼中央文字
          {
    
    
            name: '',
            type: 'pie',
            radius: ['40%', '83%'],
            avoidLabelOverlap: false,
            itemStyle: {
    
    
              borderRadius: 10,
              borderColor: '#fff',
              borderWidth: 2
            },
            label: {
    
    
              show: false,
              position: 'center',
              normal: {
    
    
                show: true,
                position: 'center',
                color: '#4c4a4a',
                formatter: '{active|今日总业务量}' + '\n\r' + '{total|' + zywl + '}',
                rich: {
    
    
                  total: {
    
    
                    fontSize: 35,
                    fontFamily: "微软雅黑",
                    color: '#454c5c'
                  },
                  active: {
    
    
                    fontFamily: "微软雅黑",
                    fontSize: 16,
                    color: '#6c7a89',
                    lineHeight: 30,
                  },
                }
              }
            },
            labelLine: {
    
    
              show: false
            },
            data: dataList
          },
          //echarts饼图内部显示百分比设置
          {
    
    
            name: '',
            type: 'pie',
            radius: ['40%', '83%'],
            avoidLabelOverlap: false,
            itemStyle: {
    
    
              borderRadius: 10,
              borderColor: '#fff',
              borderWidth: 2
            },
            label:{
    
                //echarts饼图内部显示百分比设置
              normal:{
    
    
                show:true,
                position:'inner', //标签的位置
                textStyle : {
    
    
                  fontWeight : 300 ,
                  fontSize : 10   //文字的字体大小
                },
                formatter:'{d}%'   //显示%
              }
            },
            labelLine: {
    
    
              show: false
            },
            data: dataList
          },
          //饼图图形上的文本标签
          {
    
    
            name: '',
            type: 'pie',
            radius: ['40%', '83%'],
            avoidLabelOverlap: false,
            itemStyle: {
    
    
              borderRadius: 10,
              borderColor: '#fff',
              borderWidth: 2
            },
            label: {
    
    
              //饼图图形上的文本标签
              show: true,
              position: "outside", //outside 外部显示  inside 内部显示
              formatter: '{b}:{c}',
              color: "#151414", //颜色
              fontSize: 12 //字体大小
            },
            emphasis: {
    
    
              itemStyle: {
    
    
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
              }
            },
            data: dataList
          }
        ]

4.柱状图、折线图、饼图位置调整

参考文章
【1】https://www.cnblogs.com/kevinN/p/15173642.html

1.折线图和柱状图,通过grid属性调整。

grid:{
    
    
        show:false,
        top:'20%',
        right:'5%',
        bottom:'10%',
        left:'10%'
    },

其中数值可以是像素值,也可以是百分比。

2.饼图需要使用series中的center属性。

series: [
{
    
    
name:'名称',
type: 'pie',
radius: ['40%','70%']
center: ['30%','60%']//关键点
}]

(一)tooltip问题

tooltip:提示框

扫描二维码关注公众号,回复: 15389994 查看本文章

1.单对象内容过长(解决)

问题描述
正常示例图
在这里插入图片描述
问题示例图
在这里插入图片描述
解决方法
参考文献
【1】https://blog.csdn.net/xiaoxiannvh/article/details/126174412
【2】https://www.bbsmax.com/A/kmzLAGwNJG/
相关代码

 tooltip: {
    
    
          trigger: 'axis',
          confine: true, // 限制tootip在容器内
          appendToBody: true,//避免挡住轴内容
          formatter:function (params) {
    
    
            var newParamsName ='';
            var title = '';
            var titleLength = params[0].name.length;
            var rowCount = 20;
            var rowNumber = Math.ceil(titleLength / rowCount);
            if(titleLength>rowCount){
    
    
              for (var i = 0; i < rowNumber; i++) {
    
    
                var tempStr = "";
                var start = i * rowCount;
                var end = start + rowCount;
                if (i == rowNumber - 1) {
    
    
                  tempStr = params[0].name.substring(start, titleLength);
                } else {
    
    
                  tempStr = params[0].name.substring(start, end) + "</br>";
                }
                newParamsName += tempStr;
              }
            }else {
    
    
              newParamsName = params[0].name;
            }
            //返回小圆圈和后面的数量
            return (newParamsName+"</br>"
              +"<span style='display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:"+params[0]['color']+"'></span>"+
              +params[0]['value']);
          },
        },

效果
在这里插入图片描述

2.多对象内容过长(未尝试)

问题示例图
在这里插入图片描述
参考文献
【1】https://blog.csdn.net/qq_39364032/article/details/114651447

3.加不同单位

在这里插入图片描述

tooltip: {
    
    
              trigger: 'axis',
            formatter: function (params) {
    
    
              var str = '';//声明一个变量用来存储数据
              str += params[0].name +'</br>';
              //图显示的数据较多时需要循环数据,这样才可以成功的给多条数据添加单位
              for(var i=0; i<params.length; i++){
    
    
                if(params[i].seriesName.indexOf("占比")!=-1){
    
    
                  str += params[i].marker+ params[i].seriesName +': '+ params[i].data + '%' +'</br>';
                }else {
    
    
                  str += params[i].marker+ params[i].seriesName +': '+ params[i].data + '笔' +'</br>';
                }
              }
              return str;
            }
          },

(二)legend问题

legend:图例组件

1.文字过长需”换行“、”省略“操作(解决)

(1)换行操作(俏皮做法)
该换行实现操作,是从布局着手,“卡墙”操作

        title: {
    
    
          top:'3%',
          text: '电子证照应用分析',
        },
        tooltip: {
    
    
          trigger: 'axis'
        },
        legend: {
    
    
          // orient: 'vertical',//(vertical--垂直显示,horizontal--水平显示)
          left: '60%',//按百分比左右浮动,遇到最边缘位置会酌情换行,按需调整百分比,我这边是60%
          data: ['开通', '签发', '材料关联', '结果关联']
        },

如下图
在这里插入图片描述

(2)换行操作
在这里插入图片描述
解决方法
参考文献
【1】https://blog.csdn.net/A20190518/article/details/115767734?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-115767734-blog-116131609.235v29pc_relevant_default_base3&spm=1001.2101.3001.4242.3&utm_relevant_index=7
相关代码(以下代码也可以用于”X“轴、”Y“轴的文字显示-换行操作)

legend: {
    
    
        data: ['蒸发量', '降水量', '平均温度'],
        formatter: function (params) {
    
    
        //超过十个字符就换行展示
          var newParamsName = "";// 最终拼接成的字符串
          var paramsNameNumber = params.length;// 实际标签的个数
          var provideNumber = 2;// 每行能显示的字的个数
          var rowNumber = Math.ceil(paramsNameNumber / provideNumber);// 换行的话,需要显示几行,向上取整
          
          // 条件等同于rowNumber>1
          if (paramsNameNumber > provideNumber) {
    
    
              for (var p = 0; p < rowNumber; p++) {
    
    
                  var tempStr = "";// 表示每一次截取的字符串
                  var start = p * provideNumber;// 开始截取的位置
                  var 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
        }
    },

省略操作
在这里插入图片描述
解决方法
相关代码
第一种方式:

legend: {
    
    
        data: ['蒸发量', '降水量', '平均温度'],
        formatter: function (name) {
    
    
            return echarts.format.truncateText(name, 40, '14px Microsoft Yahei', '…');
        },
        tooltip: {
    
    
            show: true
        }
    },

第二种方式

legend: {
    
    
        data: ['蒸发量', '降水量', '平均温度'],
        formatter: function (value) {
    
       //关键代码
              let res = value
              if (res.length > 5) {
    
     //只显示前4位
                res = res.substring(0, 4) + '..'
              }
              return res
        },
        tooltip: {
    
    
            show: true
        }
    },

2.legend图例个数过多-实现多排、分页操作

一:实现”多排“操作
参考文献
【1】https://blog.csdn.net/liruiqing520/article/details/123256914
【2】https://www.freesion.com/article/8816953956/
关键点:
legend 变成List数组
图例一:(两排不需要对齐)
在这里插入图片描述
图例一:(两排需要对齐)
在这里插入图片描述
以上两种,看需求
就多了一个 样式配置

// 文字块背景色,一定要加上,否则对齐不会生效
backgroundColor: "transparent", 

全代码:

option = {
    
    
  tooltip: {
    
    
    trigger: 'item'
  },
  legend:[
    {
    
    
          orient: 'horizontal',
          icon: 'circle',
          align: 'left',
          bottom: '0',
          itemWidth: 8,
          itemHeight: 8,
          y: '20',
          x: 'center',
          data: ['鼻翼煽动,口唇、指甲青紫', '胸闷', '憋气/憋醒'],
          formatter: (name): any => {
    
    
            return `{b|${
      
      name}} `;
          },
          textStyle: {
    
    
            color: '#999999',
            fontSize: 12,
            align: 'left',
            // 文字块背景色,一定要加上,否则对齐不会生效
            backgroundColor: "transparent", 
            rich: {
    
    
              b: {
    
    
                width: 200,
              },
            },
          },
    },
    {
    
    
          orient: 'horizontal',
          icon: 'circle',
          align: 'left',
          bottom: '0',
          itemWidth: 8,
          itemHeight: 8,
          y: '40',
          x: 'center',
          data: ['咳嗽或反复咳嗽', '气促', '没感觉/感觉良好'],
          formatter: (name): any => {
    
    
            return `{a|${
      
      name}} `;
          },
           
          textStyle: {
    
    
            color: '#999999',
            fontSize: 12,
            align: 'left',
            // 文字块背景色,一定要加上,否则对齐不会生效
            backgroundColor: "transparent", 
            rich: {
    
    
              a: {
    
    
                width: 200,
              },
            },
          },
    }
    ],
  series: [
    {
    
    
      name: 'Access From',
      type: 'pie',
      radius: ['40%', '70%'],
      avoidLabelOverlap: false,
      itemStyle: {
    
    
        borderRadius: 10,
        borderColor: '#fff',
        borderWidth: 2
      },
      label: {
    
    
        show: false,
        position: 'center'
      },
      emphasis: {
    
    
        label: {
    
    
          show: true,
          fontSize: '40',
          fontWeight: 'bold'
        }
      },
      labelLine: {
    
    
        show: false
      },
      data: [
        {
    
     value: 1048, name: '咳嗽或反复咳嗽' },
        {
    
     value: 735, name: '鼻翼煽动,口唇、指甲青紫' },
        {
    
     value: 580, name: '胸闷' },
        {
    
     value: 484, name: '憋气/憋醒' },
        {
    
     value: 300, name: '气促' },
        {
    
     value: 300, name: '没感觉/感觉良好' }
      ]
    }
  ]
};

简单一点的就直接

legend: [{
    
    
    data: ['鼻翼煽动,口唇、指甲青紫', '胸闷', '憋气/憋醒',],
    icon: "roundRect",
    x:'center',
    y:'0%'
},{
    
    
    data: ['咳嗽或反复咳嗽', '气促', '没感觉/感觉良好',],
    icon: "roundRect",
    x:'center',
    y:'7%'
}],

一:实现”分页“操作 (未尝试)
参考文献
【1】https://www.wanjunshijie.com/note/echarts/4983.html
【2】https://www.cnblogs.com/jindao3691/p/16093592.html

(三)Echarts 主题化,统一风格

参考文献
【1】https://blog.csdn.net/m0_62064241/article/details/122520970?spm=1001.2014.3001.5506

步骤
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

json文件,需先注册主题(假设主题名称是 “vintage”)
$.getJSON(‘xxx/xxx/vintage.json’, function(themeJSON) {
echarts.registerTheme(‘vintage’, themeJSON);//需要注册
var chart = echarts.init(dom, ‘westeros’);
});

js文件,引入vintage.js文件后,可直接使用
var chart = echarts.init(dom, ‘westeros’);

一般来说用的是js版本的,下载好以后放入项目,并且引用(import ‘@/api/westeros’;)就可以用了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_20236937/article/details/130218080
今日推荐