首页 > 其他分享 >Echarts X轴过长自动滚动 + X轴文字自适应换行

Echarts X轴过长自动滚动 + X轴文字自适应换行

时间:2023-09-14 11:55:49浏览次数:36  
标签:tmp option 换行 dataZoom value 过长 let Echarts

1.要实现自动滚动option中必须要包含一下内容

dataZoom: [{
          xAxisIndex: 0,  // 这里是从X轴的0刻度开始
            show: false,    // 是否显示滑动条,不影响使用
            type: "slider", // 这个 dataZoom 组件是 slider 型 dataZoom组件
          startValue: 0,  // 从头开始。
          endValue: this.houseXMaxlen - 1     // 一次性展示多少个
        }],
setInterval持续刷新显示类目,实现自动滚动效果
this.houseTimer = setInterval(() => {
              
              if (option.dataZoom[0].endValue >= _data.name.length) {
                option.dataZoom[0].endValue = this.houseXMaxlen - 1;
                option.dataZoom[0].startValue = 0;

              } else {
                option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1;
                option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1;
              }

              myChart.setOption(option, true);
              this.houseEchart = myChart;
            }, 1500);

2.Echarts本身是不支持X轴文字自动换行的,可以通过一些以提供的方法进行计算。

  首先可以通过 myEcharts.getWidth() 获取到echarts的整体宽度,X轴类目的数量也是知道的,就可以计算出每一类目所占用的像素宽度,假设每个字14px(fontSize),每个类目文字两侧预留空白5px(whiteLen),由此可计算类目单行文字长度 let xLabelWordLen = Math.floor((myChart.getWidth() / Math.max(xAxis[0].data.length, this.houseXMaxlen) - whiteLen * 2) / fontSize);

option中自适应换行formatter:

formatter: function(value) {
                let tmp = [], n = value.length / xLabelWordLen;
                for (let i = 0; i < n; i++) {
                  tmp.push(value.substring(i * xLabelWordLen, (i + 1) * xLabelWordLen));
                }
                return tmp.join('\n');
              }

完整代码:

    let xAxisData = ['测试换行数据1','测试换行数据2','测试换行数据3','测试换行数据14','测试换行数据15','测试换行数据16','测试换行数据17','测试换行数据18', ]; // X轴类目名称数据集
    let seriesData1 = [10, 20, 50, 60, 30, 80, 40, 70];
    let seriesData2 = [50, 30, 10, 60, 80, 70, 20, 40];
    let XMaxlen = 6; // X轴现实的最大类目数量
    let fontSize = 14; // X轴类目文字大小
    let whiteLen = 5; // X轴类目文字两侧的留白(单侧的)大小
      let myChart = echarts.init(this.$refs.houseEchart);
      let xLabelWordLen = Math.floor((myChart.getWidth() / Math.max(xAxisData.length, XMaxlen) - whiteLen * 2) / fontSize);

      let option = {
        tooltip: { trigger: 'axis', axisPointer: { type: 'cross', crossStyle: { color: '#999' } } },
        toolbox: { show: false },
        legend: { data: [ '测试1', '测试2'  ] },
        xAxis: [{
            type: 'category',
            data: xAxisData,
            axisPointer: { type: 'shadow' },
            axisLabel: {
              show: true,
              interval: 0,
              formatter: function(value) {
                let tmp = [], n = value.length / xLabelWordLen;
                for (let i = 0; i < n; i++) {
                  tmp.push(value.substring(i * xLabelWordLen, (i + 1) * xLabelWordLen));
                }
                return tmp.join('\n');
              }
            }
        }],
        yAxis: [{
          type: 'value',
          name: '测试2',
          min: 0,
          max: function() {
            let tmp = seriesData1[0];
            for (let ii = 1; ii < seriesData1.length; ii++) {
              tmp = Math.max(tmp, seriesData1[ii]);
            }
            for (let jj = 0; jj < seriesData2.length; jj++) {
              tmp = Math.max(tmp, seriesData2[jj]);
            }
            return tmp + 10;
          },
          // axisLabel: { formatter: '{value} 户' }
        }],
        dataZoom: [{
          xAxisIndex: 0,  // 这里是从X轴的0刻度开始
            show: false,    // 是否显示滑动条,不影响使用
            type: "slider", // 这个 dataZoom 组件是 slider 型 dataZoom组件
          startValue: 0,  // 从头开始 X轴类目的索引值。
          endValue: XMaxlen - 1     // 一次性展示多少个 X轴类目的索引值 需要展示的数量 - 1
        }],
        series: [{
          name: '测试1',
          type: 'line',
          tooltip: { valueFormatter: function (value) { return value + ' 户'; } },
          data: seriesData1
        }, {
          name: '测试2',
          type: 'line',
          tooltip: { valueFormatter: function (value) { return value + ' 户'; } },
          data: seriesData2
        }]
      }

      if (option && typeof option === "object") {
          myChart.setOption(option, true);

          if (this.houseTimer) clearInterval(this.houseTimer);
          // 定时自动滚动
          if (xAxisData.length > XMaxlen) {
            this.houseTimer = setInterval(() => {
              
              if (option.dataZoom[0].endValue >= xAxisData.length) {
                option.dataZoom[0].endValue = XMaxlen - 1;
                option.dataZoom[0].startValue = 0;

              } else {
                option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1;
                option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1;
              }

              myChart.setOption(option, true);
            }, 1500);
          }
      }

效果展示(截图展示自适应换行,自动滚动需自行编写运行后查看效果):

 

标签:tmp,option,换行,dataZoom,value,过长,let,Echarts
From: https://www.cnblogs.com/jindao3691/p/17702153.html

相关文章

  • 软件测试|Python数据可视化神器——pyecharts教程(八)
    Pyecharts绘制热力图当涉及可视化数据时,热力图是一种强大的工具,它可以帮助我们直观地了解数据集中的模式和趋势。在本文中,我们将学习如何使用Python中的Pyecharts库创建热力图,以便将数据转化为可视化的形式。什么是热力图?热力图是一种用于显示数据密度的二维图表,其中颜色的变化......
  • 关闭Thunderbird的自动换行
    参考https://blog.csdn.net/cuma2369/article/details/107667731https://support.mozilla.org/en-US/questions/1307935点击设置->配置编辑器:然后搜索mailnews.wraplength,把值修改为0:......
  • 大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自
    原文链接:https://blog.csdn.net/weixin_41192489/article/details/120004315大屏自适应的核心目标有:字体大小随屏幕尺寸自适应变化详见下文自动撑满全屏设置如下.bg{background:url("~@/assets/images/主背景.png");position:fixed;top:0;left:0;wi......
  • Echarts 的几个小需求实现
    前端在图表展示的时候,使用较多的是Echart库,正好这几天在做相关的项目,简单记录一下涉及到的几个简单需求实现。标题前面加图形效果类似于这样:我的实现方案是使用rich来生成对应的图形,具体配置如下:/**@format*/option={title:{text:"{rectangle|}示例......
  • 记录下常用的echarts网站
    PPChart–让图表更简单让图表更简单。PPChart提供Echarts收录、图表制作等服务http://ppchart.com/MakeAPiehttps://madeapie.com/Isqqwhttps://www.isqqw.com/apowerful,interactivechartingandvisualizationlibraryforbrowserhttps://echarts.apache.or......
  • 软件测试|Python数据可视化神器——pyecharts教程(七)
    pyecharts绘制炫酷日历图什么是日历图日历图(CalendarChart)是一种用于可视化时间序列数据的图表类型。它以日历的形式展示数据,将时间与数据值结合在一起,使得数据的周期性和趋势在日历的视觉布局中更加直观和易于理解。在日历图中,每个单元格代表一个日期(通常是天),并用不同的颜色、大......
  • Echarts快速上手
    今天5分钟快速上手Echarts.看官方文档就行。ApacheECharts<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><scriptsrc="lib/echarts.min%20(2).js"&......
  • 将pandas某列中的字符串按空格或换行符拆分成列表,然后剔除列表中的中文字符串
    要删除PandasDataFrame中某一列中的汉字字符,然后将该列的字符串按空格或换行符拆分成列表,可以按照以下步骤进行:假设你有一个名为df的DataFrame,要操作的列名为'某列':importpandasaspd#创建示例DataFramedata={'某列':['Hello你好','Thisisatest','Python编......
  • Apache HTTPD-换行解析漏洞(CVE-2017-15715)
    目录ApacheHTTPD-换行解析漏洞(CVE-2017-15715)1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证1.5、深度利用GetShell1.6、修复建议ApacheHTTPD-换行解析漏洞(CVE-2017-15715)说明内容漏洞编号CVE-2017-15715漏洞名称Apac......
  • python-pycharm打印 不换行,清空
    一、参考代码foriinrange(100):time.sleep(0.4)#print(i)print('\r','count:'+str(i),end='---')#这种方式可以避免输出内容刷屏......