1、需求描述

我们日常在使用ECharts实现曲线图或柱状图的时候,x轴上的坐标都是等距离显示的。

有时候我们可能有这个需求:

x轴上的坐标距离按照对应数据的比例进行显示。

打个比方,假设x轴上有5个点,正常情况下,我们每个点之间的距离都是30px。

这不是我们想要的效果,我们想要的效果是,第一个点和第二个点之间的距离为30px,第二个点和第三个点之间的距离为50px,第三个点和第四个点之间的距离为87px,第四个点和第五个点之间的距离为111px……,也就是根据每个点的具体业务需求(间隔的实际距离)来动态显示间隔的距离。


2、具体实现

实现思路:

  • 先隐藏x轴相关默认设置;
  • 在通过markLine属性来绘制x轴数据。

2.1、隐藏x轴相关默认设置

首先,我们应该隐藏掉x轴默认的显示,具体设置如下:

  xAxis: {
type: 'value',
axisTick: { show: false }, //隐藏刻度线
axisLabel: { show: false }, //隐藏刻度值
//网格线,参考文档:https://echarts.apache.org/zh/option.html#xAxis.splitLine
splitLine: {
show: false //隐藏分割线
}
},

2.2、设置y轴相关设置

y轴相关设置如下所示:

  yAxis: [
{
type: 'value'
}
],

2.3、设置series

接下来我们就可以在series设置markLine来实现x轴坐标数据自定义间隔距离了,具体设置如下所示:

  series: [
{
name: '图例1',
type: 'line',
z: 10, //控制曲线的浮动层级,避免在markLine下方被遮住
data: [
[0.312, 0],
[0.426, 43],
[0.582, 52],
[0.795, 53],
[1.077, 60],
[1.472, 62],
[2.016, 73],
[2.745, 76],
[3.193, 85],
[3.482, 87],
[3.762, 95],
[4.37, 100],
[4.723, 100],
[5.109, 100]
],
markLine: {
symbol: '', //取消箭头
silent: true, //取消鼠标hover事件
label: {
//标线的文本,模拟x轴显示的内容
position: 'start', //改变label位置
rotate: 45, //设置文字旋转度数(注意:ECharts官网文档居然没有rotate这个属性的说明)
// backgroundColor:'#fff'
// color:'#f00',//文字颜色
formatter: (data) => {
return data.name;
}
},
lineStyle: { color: '#e0e6f1', type: 'solid' },
data: [
{
name: '0.075',
xAxis: 0.312
},
{
name: '0.15',
xAxis: 0.426
},
{
name: '0.3',
xAxis: 0.582
},
{
name: '0.6',
xAxis: 0.795
},
{
name: '1.18',
xAxis: 1.077
},
{
name: '2.36',
xAxis: 1.472
},
{
name: '4.75',
xAxis: 2.016
},
{
name: '9.5',
xAxis: 2.475
},
{
name: '13.2',
xAxis: 3.193
},
{
name: '16',
xAxis: 3.482
},
{
name: '19',
xAxis: 3.762
},
{
name: '26.5',
xAxis: 4.37
},
{
name: '31.5',
xAxis: 4.723
},
{
name: '37.5',
xAxis: 5.109
}
]
}
}
]

说明:

  • z:控制曲线的浮动层级,如果不设置,到时候曲线显示的层级会在markLine线条的下方,会被遮住;
  • data:控制x轴坐标的数据源以及对应y轴的数据,如[37.5, 100]代表x轴的坐标点在37.5这个位置的时候y轴的数据为100;
  • markLine:自定义绘制的x轴坐标数据
    • symbol:取消绘制的箭头符号;
    • silent:取消鼠标hover事件;
    • label.position:绘制的x轴文本显示的位置;
    • label.formatter:自定义显示绘制的x轴文本内容;
    • lineStyle:绘制的样式;
    • data:要显示的x轴数据,xAxis需要和series.data中的数组中的第一个值保持一致,name为x轴上展现的内容。

2.4、最终效果

最终效果如下图所示:


3、完整代码

【2.4、最终效果】中的完整实现代码(下面的完整代码包含了一些其他设置,如:图例、图例默认显示图否、线条的颜色、自定义提示框等设置,如果不需要可自行移除),如下所示(可将如下代码直接复制到ECharts官网在线编辑器中运行查看):

option = {
grid: {
// show: true,//是否显示外边框线
// borderColor: '#f00',//外边框线颜色
top: 45,
left: 30,
right: 5,
bottom: 45,
containLabel: true
},
//提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
tooltip: {
trigger: 'axis',
formatter: function (datas, ticket) {
return datas && datas[0].data.length > 1
? datas[0].seriesName +
'(' +
datas[0].data[0] +
')' +
':' +
datas[0].data[1] +
'kg'
: datas[0].data;
}
},
//顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
title: [
{
show: true,
text: 'ZZZZ标准曲线图',
left: 'center',
top: 5,
textStyle: {
fontSize: 18,
fontWeight: 'normal'
}
},
{
show: true,
text: 'XXXX尺寸(mm)',
left: 'center',
bottom: 5,
textStyle: {
fontSize: 12,
fontWeight: 'normal'
}
}
],
//图例,参考文档:https://echarts.apache.org/zh/option.html#legend
legend: {
left: 'right',
data: ['图例1', '图例2'],
selected: {
图例1: true, //显示
图例2: false //不显示
},
selectedMode: 'multiple' //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
},
xAxis: {
type: 'value',
axisTick: { show: false }, //隐藏刻度线
axisLabel: { show: false }, //隐藏刻度值
//网格线,参考文档:https://echarts.apache.org/zh/option.html#xAxis.splitLine
splitLine: {
show: false //隐藏分割线
}
},
yAxis: [
{
type: 'value',
name: 'YYYY测试标题',
nameGap: 30,
nameRotate: 90,
nameLocation: 'middle',
splitLine: {
show: true,
lineStyle: {
color: '#e0e6f1', //'#e0e6f1',
type: 'solid'
}
},
splitNumber: 10 //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
}
],
series: [
{
name: '图例1',
type: 'line',
//设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
symbol: 'circle',
z: 10, //控制曲线的浮动层级,避免在markLine下方被遮住
//线条的颜色
lineStyle: {
color: '#409EFF'
//线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
// type: 'dotted',
},
//线条上数据点的颜色
itemStyle: {
color: '#409EFF'
},
//曲线数据点的设置,参考文档:https://echarts.apache.org/zh/option.html#series-line.label
label: {
show: true, //显示曲线上的某个点的数值
formatter: function (data) {
return data.value && data.value.length > 1
? data.value[1] + 'kg'
: data.value;
}
},
data: [
[0.312, 0],
[0.426, 43],
[0.582, 52],
[0.795, 53],
[1.077, 60],
[1.472, 62],
[2.016, 73],
[2.745, 76],
[3.193, 85],
[3.482, 87],
[3.762, 95],
[4.37, 100],
[4.723, 100],
[5.109, 100]
],
markLine: {
symbol: '', //取消箭头
silent: true, //取消鼠标hover事件
label: {
//标线的文本,模拟x轴显示的内容
position: 'start', //改变label位置
rotate: 45, //设置文字旋转度数(注意:ECharts官网文档居然没有rotate这个属性的说明)
// backgroundColor:'#fff'
// color:'#f00',//文字颜色
formatter: (data) => {
return data.name;
}
},
lineStyle: { color: '#e0e6f1', type: 'solid' },
data: [
{
name: '0.075',
xAxis: 0.312
},
{
name: '0.15',
xAxis: 0.426
},
{
name: '0.3',
xAxis: 0.582
},
{
name: '0.6',
xAxis: 0.795
},
{
name: '1.18',
xAxis: 1.077
},
{
name: '2.36',
xAxis: 1.472
},
{
name: '4.75',
xAxis: 2.016
},
{
name: '9.5',
xAxis: 2.475
},
{
name: '13.2',
xAxis: 3.193
},
{
name: '16',
xAxis: 3.482
},
{
name: '19',
xAxis: 3.762
},
{
name: '26.5',
xAxis: 4.37
},
{
name: '31.5',
xAxis: 4.723
},
{
name: '37.5',
xAxis: 5.109
}
]
}
},
{
name: '图例2',
type: 'line',
symbol: 'circle',
z: 10,
lineStyle: {
color: '#67C23A'
},
itemStyle: {
color: '#67C23A'
},
data: [
[0.212, 0],
[0.326, 43],
[0.482, 52],
[0.695, 53],
[0.977, 60],
[1.372, 62],
[1.916, 73],
[2.645, 76],
[3.093, 85],
[3.382, 87],
[3.662, 95],
[4.27, 100],
[4.623, 100],
[5.009, 100]
],
markLine: {
symbol: '',
silent: true,
label: {
position: 'start',
rotate: 45,
formatter: (data) => {
return data.name;
}
},
lineStyle: { color: '#e0e6f1', type: 'solid' },
data: [
{
name: '0.065',
xAxis: 0.212
},
{
name: '0.05',
xAxis: 0.326
},
{
name: '0.2',
xAxis: 0.482
},
{
name: '0.5',
xAxis: 0.695
},
{
name: '1.08',
xAxis: 0.977
},
{
name: '2.26',
xAxis: 1.372
},
{
name: '4.65',
xAxis: 1.916
},
{
name: '9.4',
xAxis: 2.375
},
{
name: '12.2',
xAxis: 3.093
},
{
name: '15',
xAxis: 3.382
},
{
name: '18',
xAxis: 3.662
},
{
name: '25.5',
xAxis: 4.27
},
{
name: '30.5',
xAxis: 4.623
},
{
name: '36.5',
xAxis: 5.009
}
]
}
}
]
};

ECharts中实现x轴中的坐标以不同间距显示的效果的更多相关文章

  1. VTK中获取STL模型点的坐标以及对其进行变换

    VTK是一个基于面向对象的开源三维绘图软件包,和其它的的三维绘图引擎如OSG.OGRE不同之处在于,VTK可视化对象主要是各种数据,更加注重对数据分析处理后的可视化,可视化的内容是人们无法直接感受到的 ...

  2. (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  3. highcharts中的x轴如何显示时分秒时间格式

    上一篇文章写道:三分钟上手Highcharts简易甘特图:https://www.jianshu.com/p/d669d451711b,在官方文档里面,x轴默认为年月日. 在项目需求中,x轴要表示24 ...

  4. WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  5. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

  6. numpy 中的axis轴问题

    在numpy库中,axis轴的问题比较重要,不同的值会得到不同的结果,为了便于理解,特此将自己的理解进行梳理 为了梳理axis,借助于sum函数进行! a = np.arange(27).reshap ...

  7. Unity3d中模型导入轴向不对的解决方法

    在unity3d中导入模型,经常会遇到模型的轴向与unity中默认的轴向不符合的情况. 网上有很多解决办法都是说在3dmax中导出模型时修改模型的轴向,那么我接下来讲的就是如何在unity里面修改模型 ...

  8. NX二次开发-UFUN将建模绝对空间中的点映射到工程图坐标UF_VIEW_map_model_to_drawing

    #include <uf.h> #include <uf_ui.h> #include <uf_draw.h> #include <uf_view.h> ...

  9. 【前端图表】echarts实现散点图x轴时间轴

    话不多说,老规矩,先上图,实现echarts实现散点图,x轴数据为时间年月日. 实现代码如下: <!DOCTYPE html> <html> <head> < ...

  10. ECharts 柱状图横轴(X轴)文字内容显示不全

    1.问题描述 ECharts在限制显示区域大小或者数据内容过多的时候有时会使得柱状图横轴(X轴)显示不全的问题,效果如下图所示. 2.解决办法 1)更改grid布局 原来布局 option = { g ...

随机推荐

  1. 如何使用建造者模式(Builder Pattern)创建不可变类

    本文由 ImportNew - 唐小娟 翻译自 Journaldev.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Java ...

  2. Blazor 小技巧之 lambda传参

    我们的按钮点击事件,基本上都是一个无参的方法或者是一个MouseEnvent方法. 这里以BootstrapBlazor的Button为例,它的点击回调是这样的: EventCallback<M ...

  3. S2P销讯通-SFE人才对企业管理层至关重要

    SFE这一概念,最初由外资企业引入,如今已逐渐被内资企业所采纳并融入其组织结构中,不少企业正积极构建这一部门. 1 我们观察到,近两年企业内对于SFE部门所需的人才需求急剧上升.这一部门,在外资企业中 ...

  4. uniapp 使用pinpa 持续化更新

    安装依赖 npm i pinia npm i pinia-plugin-persistedstate 新建 index.ts import { createPinia } from 'pinia' i ...

  5. nodejs版本控制器nvm安装及简单使用

    介绍:nvm是node.js的版本管理器,可以安装和切换不同版本node.js 下载:https://github.com/coreybutler/nvm-windows/releases 官网下载: ...

  6. 使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原

    Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中 ...

  7. 【网站搭建】开源社区Flarum搭建记录

    环境 服务器系统:腾讯云 OpenCloudOS 宝塔版本:免费版8.0.1 Nginx:1.24.0 MySQL:5.7.42 PHP:8.1.21 萌狼蓝天 2023年8月7日 PHP设置 1.安 ...

  8. Qt编写地图综合应用39-覆盖物圆形

    一.前言 圆形的应用场景和多边形.矩形基本一致,支持的属性也是一致,比如可以设置线条的颜色.线条的粗细.线条透明度等.也是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县 ...

  9. 鸿蒙OS开发秘籍:打造优雅的登录状态管理系统

    一.前言 在鸿蒙OS开发过程中,随着应用规模的扩大,登录状态管理逐渐成为系统设计中的一个挑战.一个清晰.高效的登录状态管理系统不仅可以简化开发流程,还能提升用户体验.本文将分享一种优雅的登录状态管理设 ...

  10. WxPython跨平台开发框架之动态菜单的管理和功能权限的控制

    在一个业务管理系统中,如果我们需要实现权限控制功能,我们需要定义好对应的权限功能点,然后在前端界面中对界面元素的可用性和功能点进行绑定,这样就可以在后台动态分配权限进行动态控制了,一般来说,权限功能点 ...