当前位置: 首页 > news >正文

手把手教你用ECharts画折线图

导读:折线图是一种基础图表,适合表示数据的变化趋势,常用于时间序列数据的表示。

作者:王大伟

来源:大数据DT(ID:hzdashuju)

在正式学习之前,先来了解一个ECharts官网提供的很好用的功能。该功能可以实时显示代码的效果,使用方法说明如下。

首先,打开ECharts官网,在“实例”菜单中选择任意一个图,如图4-1所示。

https://echarts.apache.org/exampl-es/zh/editor.html?c=area-stack

▲图4-1 ECharts实例

可以看到,左边显示的是option,也就是ECharts的具体配置,右边是对应的可视化图。当我们改变左边的代码时,右边的可视化也会实时改变。当左边的代码有误时,右边则不会显示可视化,如图4-2所示。

▲图4-2 ECharts代码有误时的界面

大家应该已经发现了,可视化设置的大部分参数都在option中,这样可以帮我们省去很多额外的工作,方便快速调试。当我们调试出满意的可视化时,将option加入框架中即可。本文演示的代码和可视化结果图都是基于这个在线工具实现的。

01 基础折线图

在ECharts中,绘制折线图需要将series中的type设置为line,代码如下所示:

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [450, 232, 301, 734, 1090, 830, 500],
        type: 'line'
    }]
};

其中,series中的data值序列长度需要和xAxis中的data值序列长度一致,x轴和y轴分别为类别(星期)和数值,可视化效果如图4-3所示。

▲图4-3 基础折线图

当我们在series中加入参数smooth: true后,可以得到较为光滑的折线(曲线)。代码如下所示:

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [450, 232, 301, 734, 1090, 830, 500],
        type: 'line',
        smooth: true
    }]
};

可视化结果如图4-4所示。

▲图4-4 基础折线图(曲线)

02 多条折线图

至此我们就学会了如何绘制单条折线图,当然我们还会遇到绘制多条折线图的情况,如图4-5所示。

▲图4-5 多条折线图

此时我们在上面单条折线图的代码中做少量修改即可,具体代码如下:

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    legend: {
        data: ['A产品销量', 'B产品销量','C产品销量'],
        left: 'right'
},
    series: [{
        name:'A产品销量',
        data: [550, 232, 311, 764, 1090, 830, 500],
        type: 'line',
        smooth: true
    },
    {
        name:'B产品销量',
        data: [420, 162, 121, 474, 720, 640, 230],
        type: 'line',
        smooth: true
    },
    {
        name:'C产品销量',
        data: [850, 432, 501, 934, 1190, 930, 600],
        type: 'line',
        smooth: true
    }]
};

通过观察可以发现,series中并列了三个字典结构,分别存放A~C产品的数据,我们加入了legend图例,目的是为了区分A~C产品的数据。需要注意的是,A~C产品数据的name字段内容需要和legend中的内容一一对应。

03 堆叠折线图

有时候,我们需要使用堆叠折线图来反映不同项的累加情况,此时可以通过在ECharts的series的每项数据中加入stack和areaStyle参数实现,可视化结果如图4-6所示。

▲图4-6 堆叠折线图

具体实现代码如下:

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    legend: {
        data: ['A产品销量', 'B产品销量','C产品销量'],
        left: 'right'
    },
    series: [{
        name:'A产品销量',
        data: [550, 232, 311, 764, 1090, 830, 500],
        type: 'line',
        smooth: true,
        stack: '总量',
        areaStyle: {}
    },
    {
        name:'B产品销量',
        data: [420, 162, 121, 474, 720, 640, 230],
        type: 'line',
        smooth: true,
        stack: '总量',
        areaStyle: {}
    },
    {
        name:'C产品销量',
        data: [850, 432, 501, 934, 1190, 930, 600],
        type: 'line',
        smooth: true,
        stack: '总量',
        areaStyle: {}
    }]
};

其中,areaStyle用于对区域填充色彩,如果没有该参数,区域将不会有填充色,感兴趣的读者可以删除该参数看看效果。堆叠的顺序自上到下和数据的顺序相反,例如代码数据中的顺序是ABC,可视化图中自上到下的顺序是CBA。

为了方便辨识堆叠总量数据信息,可以在最上层的数据中加入label参数,同时加入tooltip方便查阅数据,修改后的代码如下:

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    legend: {
        data: ['A产品销量', 'B产品销量','C产品销量'],
        left: 'right'
},
    tooltip: {
        trigger: 'axis',
        axisPointer: {
            type: 'cross',
            label: {
                backgroundColor: '#6a7985'
            }
        }
    },
    series: [{
        name:'A产品销量',
        data: [550, 232, 311, 764, 1090, 830, 500],
        type: 'line',
        smooth: true,
        stack: '总量',
        areaStyle: {}
    },
    {
        name:'B产品销量',
        data: [420, 162, 121, 474, 720, 640, 230],
        type: 'line',
        smooth: true,
        stack: '总量',
        areaStyle: {}
    },
    {
        name:'C产品销量',
        data: [850, 432, 501, 934, 1190, 930, 600],
        type: 'line',
        smooth: true,
        stack: '总量',
        label: {
                normal: {
                    show: true,
                    position: 'top'
                }
            },
        areaStyle: {}
    }]
};

可视化结果如图4-7所示。

▲图4-7 堆叠柱状图优化版

关于作者:王大伟,毕业于华东理工大学,硕士学历,目前就职于平安金融壹账通,从事数据挖掘算法工作,擅长ECharts、Python、自然语言处理、数据分析挖掘、机器学习。曾获微软最有价值专家(MVP)荣誉称号。

本文摘编自《ECharts数据可视化:入门、实战与进阶》。

点击链接了解及购买

转载请联系微信:DoctorData

推荐语:ECharts官方推荐,系统全面、由浅入深、注重实操,带领读者快速从新人到高手。

欢迎加入《ECharts数据可视化》读者群????

划重点????

更多精彩回顾

书讯 | 1月书讯:Hello 2021! (上)

书讯 | 1月书讯:Hello 2021! (下)

资讯 | TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!

书单 | 8本书助你了解人民日报“创作大脑”

干货 | 曾被“劝退”的 C++ 20 正式发布!

收藏 | DB-Engines:PostgreSQL获得“2020年度数据库”荣誉

上新 | ECharts开山之作,官方推荐!精心规划适合初学者的ECharts学习路径!

点击阅读全文购买

相关文章:

  • 【第38期】移动边缘计算MEC,站在5G“中央”
  • 简单却巧妙,工程师创意太牛了!
  • 【前端实时音视频系列】WebRTC入门概览
  • 2021 年最值得学习的 5 大机器学习编程语言!
  • ECharts可视化经验分享
  • 2021年,AI哪个方向最火?看看大神们怎么说
  • 后“量子霸权”时代你不可错过的几本好书
  • Python 中最流行的十个标准库
  • IDC发布2021年中国人工智能市场10大预测
  • “绿宝书”好在哪?前端大佬们都在推荐
  • 【第39期】打破“打工人”魔咒,RPA 来狙击!
  • 适合的才是最好的,小众数据库黑马不可小觑
  • 刚刚拿下「中国AI最高奖」的语音技术,能给我们带来什么?
  • 百度官方文档Plus版,PaddlePaddle深度学习框架介绍
  • 华为首席开源联络官执笔,带你了解5G时代的边缘计算
  • C学习-枚举(九)
  • log4j2输出到kafka
  • mysql_config not found
  • Node + FFmpeg 实现Canvas动画导出视频
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 详解NodeJs流之一
  • 新书推荐|Windows黑客编程技术详解
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 从如何停掉 Promise 链说起
  • 函数计算新功能-----支持C#函数
  • 组复制官方翻译九、Group Replication Technical Details
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • "无招胜有招"nbsp;史上最全的互…
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (2)nginx 安装、启停
  • (k8s中)docker netty OOM问题记录
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (windows2012共享文件夹和防火墙设置
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (译)2019年前端性能优化清单 — 下篇
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • ***检测工具之RKHunter AIDE
  • *2 echo、printf、mkdir命令的应用
  • *p++,*(p++),*++p,(*p)++区别?
  • . Flume面试题
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net经典笔试题
  • @拔赤:Web前端开发十日谈
  • [1181]linux两台服务器之间传输文件和文件夹
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [C#]C#学习笔记-CIL和动态程序集
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [IOI2018] werewolf 狼人
  • [javascript]Tab menu实现
  • [leetcode] 61. 旋转链表