写在前面
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 TitleOpts
my_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 TitleOpts
my_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 LegendOpts
my_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 VisualMapOpts
my_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 ToolboxOpts
my_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 Map
from pyecharts.options import VisualMapOpts
map = 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 Map
from pyecharts.options import VisualMapOpts
map = 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 Bar
from 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,Timeline
from 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'
往期回顾
如何联系我们
公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号,方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅,备注来意会优先通过)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群
大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容