echarts的markArea图表标域的灵活运用

在这里插入图片描述

首先上图看效果:

可以看到图中蓝色 图表标域的地方是正好在中间标注了X轴的其中一个点,

而ecahrts官网的例子是在这里插入图片描述

在两个X轴点位上的,

那么标注在中间怎么做到的呢,看操作。

在这里插入图片描述

首先需要了解markArea,这里就不过多阐述了,我们是用X轴的百分比值的方式设置标注。

在这里插入图片描述

需要在你图表处计算收尾点位的百分比值分别是多少,如图所示:

左侧初始百分比为10% 结束百分比为90% 那么图中总百分比为90% - 10%80%

然后计算表中颜色中的点位数-1 ,也就是X轴点数-1 求图中线段数量。

图中为20个点位 线段数则为19。

那么每个点的X轴百分比为80/194.2%

每段线总长度可以求出,一半就是中线的距离,直接上代码。

option = {
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: ['00:00', '01:15', '02:30', '03:45', '05:00', '06:15', '07:30', '08:45', '10:00', '11:15', '12:30', '13:45', '15:00', '16:15', '17:30', '18:45', '20:00', '21:15', '22:30', '23:45']
  },
  yAxis: {
    type: 'value',
  },
  series: [
    {
      name: '',
      type: 'line',
      smooth: true,
      // prettier-ignore
      data: [300, 280, 250, 260, 270, 300, 550, 500, 400, 390, 380, 390, 400, 500, 600, 750, 800, 700, 600, 400],
      markArea: {
        itemStyle: {
          color: 'rgba(255, 173, 177, 0.4)'
        },
        //当前为
        data: [
          [
            {
              name: 'Morning Peak',
              x: '10%'
            },
            {
              x: '90%'
            }
          ]
        ]
      }
    }
  ]
};
//当前为需要标注的对象数组
const peak = ['07:30','20:00']
//计算每个线段X轴百分比
const itemRatio = 80/(option.xAxis.data.length-1)
peak.map((peak)=>{
    //当前所选位置的索引
    let peakIndex = option.xAxis.data.indexOf(peak)
    //设置起始位置,要把开始的百分之10加上
    let xStart = 10+itemRatio*peakIndex
    option.series[0].markArea.data.push([{
            name: '',
            //减掉长度的一半为中心点左侧
            x: xStart-(itemRatio/2)+'%',
            itemStyle: {
                color: "rgba(50, 163, 182, 0.16)",
                borderColor: "#00A5C4",
                borderWidth: 2,
                borderType: 'dotted'
            },
        },
        {
          //加上长度的一半为中心点右侧
            x: xStart+(itemRatio/2)+'%',
        },
    ])
})

可直接复制代码到echarts里去调试

在这里插入图片描述

看图,拿下!

2022/7/15 更新:只添加边线的样式,配合markLine实现,代码在下方。
在这里插入图片描述
同cv进入echart编辑页面进行调试食用。

option = {
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: ['00:00', '01:15', '02:30', '03:45', '05:00', '06:15', '07:30', '08:45', '10:00', '11:15', '12:30', '13:45', '15:00', '16:15', '17:30', '18:45', '20:00', '21:15', '22:30', '23:45']
  },
  yAxis: {
    type: 'value',
  },
  series: [
    {
      name: '',
      type: 'line',
      smooth: true,
      // prettier-ignore
      data: [300, 280, 250, 260, 270, 300, 550, 500, 400, 390, 380, 390, 400, 500, 600, 750, 800, 700, 600, 400],
      markArea:{
        data:[]
      },
      markLine: {
        lineStyle:{
          color: 'rgba(50, 163, 182, 0.16)',
          width:2
        },
        symbolSize :0,
        //当前为
        data: []
      }
    }
  ]
};
//当前为需要标注的对象数组
const peak = ['07:30','20:00']
//计算每个线段X轴百分比
const itemRatio = 80/(option.xAxis.data.length-1)
peak.map((peak)=>{
    //当前所选位置的索引
    let peakIndex = option.xAxis.data.indexOf(peak)
    //设置起始位置,要把开始的百分之10加上
    let xStart = 10+itemRatio*peakIndex
    option.series[0].markArea.data.push([{
            name: '',
            //减掉长度的一半为中心点左侧
            x: xStart-(itemRatio/2)+'%',
            itemStyle: {
                color: "rgba(50, 163, 182, 0.16)",
                borderColor: "#00A5C4",
                borderWidth: 0,
                borderType: 'dotted'
            },
        },
        {
          //加上长度的一半为中心点右侧
            x: xStart+(itemRatio/2)+'%',
        },
    ])
    //当前为 侧边虚线数据
    option.series[0].markLine.data.push([{
            name: '',
            //减掉长度的一半为中心点左侧
            x: xStart-(itemRatio/2)+'%',
            itemStyle: {
                color: "rgba(50, 163, 182, 0.16)",
                borderColor: "#00A5C4",
                borderWidth: 20,
                borderType: 'dotted'
            },
            y: '90%'
        },
        {
          //加上长度的一半为中心点右侧
            x: xStart-(itemRatio/2)+'%',
            y: '8%'
        },
    ],[{
            name: '',
            //减掉长度的一半为中心点左侧
            x: xStart+(itemRatio/2)+'%',
            itemStyle: {
                color: "rgba(50, 163, 182, 0.16)",
                borderColor: "#00A5C4",
                borderWidth: 20,
                borderType: 'dotted'
            },
            y: '90%'
        },
        {
          //加上长度的一半为中心点右侧
            x: xStart+(itemRatio/2)+'%',
            y: '8%'
        },
    ])
})

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
ECharts是一个基于JavaScript的开源可视化库,它可以用来制作各种各样的酷炫图表,如折线图、柱状图、饼图、K线图等等。ECharts支持多种数据格式的导入,如JSON、XML、CSV等,同时也支持多种图表的展示方式,如动态图表、3D图表等。除此之外,ECharts还提供了丰富的交互式功能,如悬停提示、可拖拽、可缩放等,使得用户可以更加直观地理解和分析数据。ECharts具有简单易用、性能出色、图表风格多样等特点,因此受到了众多开发者的青睐。 以下是几个酷炫的ECharts图表示例: 1. 折线图:折线图可以用来展示数据随时间变化的趋势,可以帮助用户更好地理解和预测数据的变化趋势。在ECharts中,可以通过设置不同的参数来制作不同样式的折线图。 2. 柱状图:柱状图可以用来展示不同类别之间的数据比较,如展示不同商品的销售量比较等等。在ECharts中,可以通过设置不同的参数来制作不同样式的柱状图。 3. 饼图:饼图可以用来展示数据的占比关系,如展示不同品牌的市场占比等等。在ECharts中,可以通过设置不同的参数来制作不同样式的饼图。 4. K线图:K线图主要用于展示股票等金融数据的变化趋势,可以帮助用户更好地理解和预测股票价格的变化趋势。在ECharts中,可以通过设置不同的参数来制作不同样式的K线图。 总之,ECharts是一个非常强大且易于使用的可视化库,可以帮助用户更加直观地理解和分析数据。无论是制作简单的图表还是复杂的图表ECharts都可以满足您的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值