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 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'

往期回顾

生信Python速查手册

Python安装(Windows+Linux)

Python的"Rstudio"——Pycharm

码Python神器:jupyter notebook

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

Python判断语句

Python循环语句

Python函数与方法

一文掌握Python数据容器

Python函数进阶

Python文件操作

Python异常

Python模块

Python包的创建、导入、安装

如何联系我们

公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号,方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅,备注来意会优先通过)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群

大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个关于2019年粤港澳地区GDP情况的可视化地图案例,同样使用了pyecharts地理图表,并且实现了动态演示数据的效果: ```python import pandas as pd import numpy as np import random from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.faker import Faker from pyecharts.globals import ThemeType from pyecharts.commons.utils import JsCode # 读取数据 data=pd.read_excel('gdp_guangdong_hk_macau.xlsx') # 绘制地图 map=Map() map.add("2019年粤港澳地区GDP",list(zip(data['地区'],data['GDP'])), "world",is_map_symbol_show=False) map.set_global_opts(title_opts=opts.TitleOpts(title="2019年粤港澳地区GDP情况", subtitle="数据来源:国家统计局"), visualmap_opts=opts.VisualMapOpts(max_=1000000)) # 实现动态效果 values=list(data['GDP']) gdp_max=max(values) gdp_min=min(values) gdp_range=gdp_max-gdp_min def get_random_values(): return [random.randint(gdp_min,gdp_max) for _ in range(len(data))] def update_map(): map.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) map.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=gdp_range), title_opts=opts.TitleOpts(title="2019年粤港澳地区GDP情况", subtitle="数据来源:国家统计局"), graphic_text_opts=opts.GraphicTextOpts( graphic_item=opts.GraphicItem( left="center", top="center" ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( text="数据更新中......", font="bold 20px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="rgba(0,0,0,0.3)" ) ) ) ) data['GDP']=get_random_values() map.set_data_pair(list(zip(data['地区'],data['GDP']))) return map.dump_options_with_quotes() # 执行动态效果 map.add_js_funcs("setInterval(function (){" "option="+update_map()+";" "myChart.setOption(option);" "}, 2000);") map.render("gdp_guangdong_hk_macau.html") ``` 这段代码同样读取一个名为"gdp_guangdong_hk_macau.xlsx"的数据文件,其中包含了粤港澳地区的GDP数据。然后使用pyecharts库中的Map类,将数据绘制在地图上。最后使用add_js_funcs()方法实现了动态效果,每隔2秒钟更新一次数据。 这个案例还使用了pyecharts库中的Faker类,用来生成一些假数据。如果您的数据是实时更新的,可以将get_random_values()函数替换为从网站或数据库中获取数据的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值