一次偶然的机会,接触了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
能够正常展示如下水球动态图,就表示一切OK
⑤如果仍然存在报错等问题,可以自己去下载安装文件,下面是是最新版pyecharts1.7.1文件链接。
pyechartspypi.org下载后,把文件放到Anaconda3Libsite-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 randomc = (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 randomcate = ['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 Bar3Dhours = ["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是个好产品。