当前位置: 首页 > 知识库问答 >
问题:

echarts - 怎么自动计算 ECharts X轴名称的 nameGap ?

唐宇定
2023-05-30

如图,当 X 轴名称位置为中间的时候,此时设置 label 旋转,会和名称重合,
目前找到的办法是设置 nameGap 属性,但是 label 数据是动态的,所以 nameGap 也无法设置为一个具体的值,有办法自动计算 nameGap 或者使用其他办法解决这个问题么?

谢谢

https://codepen.io/hungtcs-the-sasster/pen/RwemLPo

image.png

共有2个答案

季城
2023-05-30

label文件较多,可以考虑换行显示,可以在axisLabel属性里面加一个formatter函数进行换行操作即可

axisLabel: {
       rotate: 90,
       formatter: function (params) {
         var newParamsName = "";
         var paramsNameNumber = params.length;
         var provideNumber = 3; // 一行显示几个字 然后就超过字数就会自动换行
         var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
         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;
       }
     }

image.png

屠泰平
2023-05-30
let labels = ['标签1', '标签2', '标签3'];
let maxWidth = 0;
labels.forEach(label => {
  let width = echarts.graphic.getTextWidth(label, '14px Arial');
  if (width > maxWidth) {
    maxWidth = width;
  }
});

let nameGap = Math.ceil(maxWidth / 2);
let option = {
  xAxis: {
    type: 'category',
    data: labels,
    axisLabel: {
      interval: 0,
      rotate: -30,
      margin: 20,
    },
    nameGap: nameGap,
  },
  yAxis: {
    type: 'value',
  },
  series: [
    {
      type: 'bar',
      data: [10, 20, 30],
    },
  ],
};

let chart = echarts.init(document.getElementById('chart'));
chart.setOption(option);

使用echarts.graphic.getTextWidth方法获取每个标签的宽度把所有标签的宽度中的最大值存储在maxWidth中。然后计算nameGap的值,并将其设置为X轴的nameGap属性。

 类似资料:
  • 问题内容: 我想知道是否有一种方法可以用Java获取计算机名称?我已经看到了该功能的几个答案。但是我想知道是否存在不使用网络的方法? (作为一个附带的问题,计算机名称是否仍然只是一个网络事物,因此必须以这种方式进行??) 问题答案: 操作系统的基础DNS(域名系统)库从IP地址 解析 计算机“名称”。跨操作系统没有通用的计算机名称概念,但DNS通常可用。如果尚未配置计算机名称,以便DNS可以解析它

  • MXNet后端会自动构建计算图。通过计算图,系统可以知道所有计算的依赖关系,并可以选择将没有依赖关系的多个任务并行执行来获得计算性能的提升。例如“异步计算”一节的第一个例子里依次执行了a = nd.ones((1, 2))和b = nd.ones((1, 2))。这两步计算之间并没有依赖关系,因此系统可以选择并行执行它们。 通常,一个运算符会用到所有CPU或单块GPU上全部的计算资源。例如,dot

  • 问题内容: 我很困惑,在Google中找不到。谁能告诉我操作员名称是什么? 问题答案: 不等于,等于

  • Liquibase是协调数据库更改的好工具。我在集群环境中启动时运行liquibase变更集。第一个应用程序实例放置一个锁(在databasechangeloglock表中)并执行变更集。其他实例在抓取锁时,只将执行的变更集标记为MARK_RAN。到现在为止,一直都还不错。 最近有一个问题,我不得不深入研究databasechangelog表的细节。我希望在元信息中看到实例名(机器名)。但我在那里

  • 用Echarts GL怎么实现这种效果 有没有类似例子的配置代码参考