一次偶然的机会,接触了pyecharts,发现做图交互效果非常棒,便深究、摸索、入坑。这篇文章主要讲述自己在安装和使用中遇到的问题,解决方法,最后还会有pyecharts中自己比较喜欢的绘图功能。
pyecharts是一款将python与echarts结合的强大的数据可视化工具。Echarts 是百度开源的一个数据可视化 JS 库, Echarts可以生成非常棒的可视化交互图,pyecharts的开发让在python平台上也可以直接使用数据生成图。
一、pyecharts v1安装使用
我平时使用的是jupyter notebook,因为anaconda中Jupyter Notebook里没有集成pyecharts库,没有直接调用,需要自行安装。
安装pyecharts之前,我们需要了解pyecharts新旧版本的重大区别,自己下载的是什么版本,因为这会影响你代码是否能正常运行。我自己当初不慎下载了最新V1版,但写的代码还是老代码,结果各种报错,如下图等问题。
pyecharts在去年5月份的时候,发布了全新版本v1,修复了之前0.5.X版本留下的bug,但在宣传新版本各种好的时候,存在一个非常严重的问题,新版本向下不再兼容pyecharts 低版本,旧版本上好多语句代码都在新版本上都无法使用。当我们使用原来跑通的代码,在无意间更新版本后,使用时各种ImportError、AttributEerror报错,不要怀疑自己,先去检查一下自己使用的版本。一定要记住,V1是一个分水岭,2019年5月也是一个分水岭,现今大部分新安装的都是V1新版本。
①开始安装,管理员模式运行cmd,输入pip install pyecharts
如果报错:You are using pip version 10.0.1, however version 19.0.2 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
未报错,说明版本以更新,下面②、③步骤可以忽略。
②更新版本,输入python -m pip install --upgrade pip
更新成功后,会提示:Successfully installed pip-19.0.2
③前面准备就绪后,再次输入 pip install pyecharts
如果成功会提示:Successfully installed.....pyecharts.....(中间内容省略,看关键字)
④验证是否可以正常使用,打开jupyter notebook,输入一个简单的测试代码
from pyecharts import options as opts
from pyecharts.charts import Liquid
c = (
Liquid()
.add("lq", [0.5, 0.6])
.set_global_opts(title_opts=opts.TitleOpts(title="Liquid-示例"))
)
c.render_notebook()
能够正常展示如下水球动态图,就表示一切OK
⑤如果仍然存在报错等问题,可以自己去下载安装文件,下面是是最新版pyecharts1.7.1文件链接。pyechartspypi.org
下载后,把文件放到Anaconda3\Lib\site-packages文件夹里面。
运行Anaconda Prompt,输入pip install pyecharts,再次测试是否可以正常使用。
如果想安装历史旧版本,也可以使用此方法。
⑥如果已安装过pyecharts,想要查看自己是什么版本的,可以在打开cmd
输入pip list,会显示已经安装过的文件版本
二、pyecharts v1绘图案例
这里绘图案例,选择了自己比较感兴趣的几个图表,每各图中涉及的数据值都是随机生产,数据不具参考价值。
(1)流向图
全国范围:
from pyecharts.charts import Geo
# 导入配置项
from pyecharts import options as opts
# ChartType:图标类型,SymbolType:标记点类型
from pyecharts .globals import ChartType, SymbolType
import random
c = (
Geo()
.add_schema(maptype="china") # 地图类型,这里选择china
.add(
"",
[("天津", 120000), ("上海", 100000), ("广州", 80000), ("深圳", 90000), ("长沙", 100000), ("郑州", 100000),("杭州", 70000),("乌鲁木齐",90)],
type_=ChartType.EFFECT_SCATTER,
color="green",
)# 添加数据点
.add(
"geo",
[("北京", "天津"), ("北京", "上海"),("北京", "广州"),("北京", "深圳"),("北京", "长沙"),("北京", "郑州"),("北京", "杭州"),("北京", "乌鲁木齐")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="yellow"
),# 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
linestyle_opts=opts.LineStyleOpts(curve=0.2),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))# 不显示标签
.set_global_opts(title_opts=opts.TitleOpts(title="北京人口省外输出图"))
)
c.render_notebook()# 直接在notebook里显示图表
省内范围:
c = (
Geo()
.add_schema(maptype="河南") # 地图类型,这里选择郑州
.add(
"",
[("安阳", 20000), ("信阳", 10000), ("南阳", 8000), ("洛阳", 9000), ("濮阳", 1000)],
type_=ChartType.EFFECT_SCATTER,
color="green",
)# 添加数据点
.add(
"geo",
[("郑州", "安阳"), ("郑州", "信阳"),("郑州", "南阳"),("郑州", "洛阳"),("郑州", "濮阳")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="yellow"
),# 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
linestyle_opts=opts.LineStyleOpts(curve=0.2),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))# 不显示标签
.set_global_opts(title_opts=opts.TitleOpts(title="郑州人口省内输出图"))
)
c.render_notebook()# 直接在notebook里显示图表
(2)热力图
以全国各省份人口分布热力图为例(这里随机选择部分省份)
province = ['北京', '上海', '广州', '深圳', '河北', '河南', '湖北', '湖南', '黑龙江', '吉林', '内蒙古', '新疆', '西藏']
data = [(i, random.randint(100, 350)) for i in province]
geo = (Geo()
.add_schema(maptype="china")
.add("人口", data,
type_=ChartType.HEATMAP)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(),
legend_opts=opts.LegendOpts(is_show=False),
title_opts=opts.TitleOpts(title="Geo-全国热力地图"))
)
geo.render_notebook()
(3)时间轴
各品牌电脑线上和线下近几年销量对比
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType
import random
cate = ['Apple', 'Dell', 'Toshiba', 'Samsung', 'Lenovo']
tl = Timeline()
for i in range(2015, 2019): #选择年份范围
bar = (
Bar()
.add_xaxis(cate)
.add_yaxis("线上", [random.randint(10000, 15000) for _ in cate]) #随机赋值
.add_yaxis("门店", [random.randint(7000, 12000) for _ in cate])
.set_global_opts(title_opts=opts.TitleOpts("电脑品牌{}年营业额".format(i)))
)
tl.add(bar, "{}年".format(i))
tl.render_notebook()
(4)3D柱状图
建立x坐标为小时,y坐标为星期,z坐标为数值的3维动态柱状图
import pyecharts.options as opts
from pyecharts.charts import Bar3D
hours = ["0","1","2","3","4","5","6","7","8","9","10","11", "12","13","14","15","16","17","18","19","20","21","22","23",]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
data = [[random.randint(0, 6), random.randint(0, 23), random.randint(0, 15)]
for _ in range(100)]
data = [[d[1], d[0], d[2]] for d in data]
Bar3D = (Bar3D(init_opts=opts.InitOpts(width="800px", height="400px"))
.add(
series_name="",
data=data,
xaxis3d_opts=opts.Axis3DOpts(type_="category", data=hours),
yaxis3d_opts=opts.Axis3DOpts(type_="category", data=days),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=20,
range_color=[
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
],
))
)
Bar3D.render_notebook()
三、总结
相对自己之前知悉的Matplotlib、Seaborn等绘图包,接触pyecharts又多打开了一扇大门,愈发觉得围绕python开发的各种包都好强大,python是个好产品。