当前位置:首页>python>Python数据可视化案例:pyecharts

Python数据可视化案例:pyecharts

  • 2026-10-21 13:27:59
Python数据可视化案例:pyecharts

写在前面

ECharts是百度开源的纯 Javascript 图表库,目前开源可以与highcharts相匹敌的一个图表库.支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)、雷达图(填充雷达图)、和弦图、力导向布局图、地图、仪表盘、漏斗图、事件河流图等12类图表,同时提供标题,详情气泡、图例、值域、数据区域、时间轴、工具箱等7个可交互组件,支持多图表、组件的联动和混搭展现。而pyecharts作为一个Python的扩展包可以实现在Python内调用ECharts(参考:https://zhuanlan.zhihu.com/p/358632139)

一、JSON数据格式

15.1.1 定义

JSON是一种轻量级数据交互格式,可以按照JSON指定的格式去组织和封装数据。其本质是一个带有特定格式的字符串,其可以在各个编程语言中进行流通、传递、交互。而Python中的数据格式(列表、字典)可以做到与JSON的无缝切换。注:当JSON是列表时,需要列表中嵌套的是字典。

15.1.2 Python与Json数据的相互转化

# 导入json模块import json# 准备python数据mydict = {"name":"Biomamba","Date":2023,"major":"Bioinformatics"}print(f"mydict的数据格式是{type(mydict)}")# python数据转json
## mydict的数据格式是<class 'dict'>
my_json = json.dumps(mydict,ensure_ascii=False)#ensure_ascii 保证对中文的可读性print(f"my_json的数据格式是:{type(my_json)}")# 确实如上所述,json的数据格式实质上是字符串
## my_json的数据格式是:<class 'str'>
my_tran = json.loads(my_json)print(f"json数据转回python数据后的格式为:{type(my_tran)}")
## json数据转回python数据后的格式为:<class 'dict'>

二、pyecharts

echarts由百度团队开发,因此官网拥有丰富的中文教程:https://pyecharts.org

15.2.1 折线图演示

from pyecharts.charts import Line# 得到折线对象my_line = Line()print(type(my_line))
## <class 'pyecharts.charts.basic_charts.line.Line'>
# 添加X轴数据my_line.add_xaxis(["SampleA","SampleB","SampleC"])# 添加y轴数据
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.add_yaxis("Reads number",[10,20,30])# 渲染并生成图表
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.render()
## 'F:\\公众号\\Python学习\\render.html'

得到图表如下:

15.2.2 全局配置选项

# 设置标题名称from pyecharts.options import TitleOptsmy_line.set_global_opts(    title_opts =        TitleOpts(title ="我是一个标题"# 控制标题名称                     ))# 渲染并生成图表
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.render()
## 'F:\\公众号\\Python学习\\render.html'

可以看到新生成的标题:

# 调整标题位置from pyecharts.options import TitleOptsmy_line.set_global_opts(    title_opts =        TitleOpts(title ="我是一个标题", # 控制标题名称                     pos_left ="center", # 控制标题水平位置                         pos_bottom ="1%"# 控制标题垂直位置                 ))# 渲染并生成图表
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.render()
## 'F:\\公众号\\Python学习\\render.html'

可以看到标题的位置被改变:

# 设置图例是否展示from pyecharts.options import LegendOptsmy_line.set_global_opts(  legend_opts = LegendOpts(is_show =False)      )# 渲染并生成图表
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.render()
## 'F:\\公众号\\Python学习\\render.html'

可以图例被关闭:

# 设置视觉映射是否展示from pyecharts.options import VisualMapOptsmy_line.set_global_opts(        visualmap_opts = VisualMapOpts(is_show =True))# 渲染并生成图表
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.render()
## 'F:\\公众号\\Python学习\\render.html'

多出的视觉映射:

# ToolboxOpts可以交互式的切换图表形式from pyecharts.options import ToolboxOptsmy_line.set_global_opts( toolbox_opts = ToolboxOpts(is_show =True))# 渲染并生成图表
## <pyecharts.charts.basic_charts.line.Line object at 0x000001AFF3AABD68>
my_line.render()
## 'F:\\公众号\\Python学习\\render.html'

在右上角多出了一些可以交互的图标: 例如点击切换为柱状图:

15.2.3 构建地图

通过Map功能实现

# 绘制一张最简单的地图:from pyecharts.charts import Map# 构建地图对象:map= Map() # 模拟一个数据my_data = [    ("北京市", 99),    ("上海市", 199),    ("湖南市", 299),    ("台湾省", 399),    ("广东省", 299)]# map.add("中国地图",my_data,"china")
## <pyecharts.charts.basic_charts.map.Map object at 0x000001AFF51EE048>
map.render()
## 'F:\\公众号\\Python学习\\render.html'

得到一个光秃秃的地图:

# 给图片加上对应地区的颜色:from pyecharts.charts import Mapfrom pyecharts.options import VisualMapOptsmap= Map()my_data = [    ("北京市", 99),    ("上海市", 199),    ("湖南市", 299),    ("台湾省", 399),    ("广东省", 299)]map.add("地图",my_data,"china")
## <pyecharts.charts.basic_charts.map.Map object at 0x000001AFF51EED68>
map.set_global_opts(visualmap_opts = VisualMapOpts(                    is_show=True))
## <pyecharts.charts.basic_charts.map.Map object at 0x000001AFF51EED68>
map.render()
## 'F:\\公众号\\Python学习\\render.html'

可以看出,我们标记的地区展现出了对应的颜色:但是图例仍需修改

# 修改图例:from pyecharts.charts import Mapfrom pyecharts.options import VisualMapOptsmap= Map()my_data = [    ("北京市", 99),    ("上海市", 199),    ("湖南市", 299),    ("台湾省", 399),    ("广东省", 299)]map.add("地图",my_data,"china")
## <pyecharts.charts.basic_charts.map.Map object at 0x000001AFF51D9358>
map.set_global_opts(visualmap_opts = VisualMapOpts(                    is_show=True,                    is_piecewise=True,                    pieces = [                        {"min":1,"max":99,"label":"1-99人","color":"#00FF00"},                        {"min":100,"max":499,"label":"100-499人","color":"#FF4500"}                    ]))
## <pyecharts.charts.basic_charts.map.Map object at 0x000001AFF51D9358>
map.render()
## 'F:\\公众号\\Python学习\\render.html'

得到有颜色分布及图例的地图结果:当数据具有跟多元素时,添加至my_data即可,这里就不多作演示了~

15.2.4 动态柱状图

# 基础柱状图from pyecharts.charts import Bar# 构建柱状图对象bar = Bar()# 添加X轴数据:bar.add_xaxis(["Sample_1","Sample_2","Sample_3"])# 添加y轴数据:
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51EEE48>
bar.add_yaxis("Reads Number",[100000,200000,150000])# 绘图
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51EEE48>
bar.render("基础柱状图.html") # render宣传出图时可以指定文件名
## 'F:\\公众号\\Python学习\\基础柱状图.html'

得到一个最基本的柱状图:

# 将上述柱状图的x轴与y轴进行翻转bar.reversal_axis()# 绘图
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51EEE48>
bar.render("基础柱状图.html")
## 'F:\\公众号\\Python学习\\基础柱状图.html'

此时得到的柱状图便是右左向右:我们可以看出,这时数字的位置在柱状图中央,我们看通过position调整其位置:

# 基础柱状图from pyecharts.charts import Barfrom pyecharts.options import LabelOpts# 构建柱状图对象bar = Bar()# 添加X轴数据:bar.add_xaxis(["Sample_1","Sample_2","Sample_3"])# 添加y轴数据:
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51C7630>
bar.add_yaxis("Reads Number",[100000,200000,150000],            label_opts=LabelOpts(position="right")             )
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51C7630>
bar.reversal_axis()# 绘图
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51C7630>
bar.render("基础柱状图.html")
## 'F:\\公众号\\Python学习\\基础柱状图.html'

可以看到数字的位置被改变

对于pyecharts来说,可以创建时间线来生成一些列柱状图:

# 基础柱状图from pyecharts.charts import Bar,Timelinefrom pyecharts.options import*# 构建第一个柱状图对象bar_1 = Bar()bar_1.add_xaxis(["Sample_1","Sample_2","Sample_3"])
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51D2AC8>
bar_1.add_yaxis("Reads Number",[100000,200000,150000])
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51D2AC8>
bar_2 = Bar()bar_2.add_xaxis(["Sample_1","Sample_2","Sample_3"])
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51D2DA0>
bar_2.add_yaxis("Reads Number",[160000,250000,170000])
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51D2DA0>
bar_3 = Bar()bar_3.add_xaxis(["Sample_1","Sample_2","Sample_3"])
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51DA0F0>
bar_3.add_yaxis("Reads Number",[50000,190000,150000])# 创建时间线对象
## <pyecharts.charts.basic_charts.bar.Bar object at 0x000001AFF51DA0F0>
timeline = Timeline()timeline.add(bar_1,"时间线1")
## <pyecharts.charts.composite_charts.timeline.Timeline object at 0x000001AFF51DA400>
timeline.add(bar_2,"时间线2")
## <pyecharts.charts.composite_charts.timeline.Timeline object at 0x000001AFF51DA400>
timeline.add(bar_3,"时间线3")# 绘图
## <pyecharts.charts.composite_charts.timeline.Timeline object at 0x000001AFF51DA400>
timeline.render("时间线柱状图.html") # render宣传出图时可以指定文件名
## 'F:\\公众号\\Python学习\\时间线柱状图.html'

这时候就得到了一个底部具有时间线轴的柱状图,可以自由的选择时间线进行展示,并且自动播放

# 设置自动播放:timeline.add_schema(play_interval =1000 ,#播放间隔/毫秒is_timeline_show =True, # 是否展示时间线is_auto_play =True, # 是否自动播放is_loop_play =True# 是否循环播放)
## <pyecharts.charts.composite_charts.timeline.Timeline object at 0x000001AFF51DA400>
timeline.render("时间线柱状图.html")
## 'F:\\公众号\\Python学习\\时间线柱状图.html'

往期回顾

生信Python速查手册

Python安装(Windows+Linux)

Python的"Rstudio"——Pycharm

码Python神器:jupyter notebook

一文了解Python基础:字面量、注释、变量、类型、运算符

Python判断语句

Python循环语句

Python函数与方法

一文掌握Python数据容器

Python函数进阶

Python文件操作

Python异常

Python模块

Python包的创建、导入、安装

如何联系我们

留一个领取资料、开箱即用的单细胞分析镜像的微信号[Biomamba_zhushou],方便各位随时交流。同时我们也构建了交流群矩阵,欢迎大家入群讨论。
大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
没有检索,就没有发言权

已有生信基地联系方式的同学无需重复添加

您点的每个赞和在看,我都认真当成了喜欢

最新文章

随机文章