Python 之 pyecharts 使用
要说绘制动态图表,echarts 肯定是有一席之地的,特别是像 flask 这种轻量级的 web 框架,在 html 中动态嵌入生成 echarts 无疑是很优的选择。pyecharts 简单来说就是以 python 的方式来生成对应的 echarts 图表。
安装
pip install pyecharts
官方示例使用
对于我们大部分普通人来说,记忆力并不是那么超群,要记住那么多图表的参数设置着实有点困难,好在我们还有在线 Demo 手册 pyecharts-gallery
从示例找对应效果代码
比如,常规的最简单的柱状图是下面这种的。
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80])bar.render("myecharts.html")
但你可能想要的是堆叠的图表,而不是这种并列的图表,但是堆叠的图表要怎么设置参数却忘了。这个时候,你可以打开在线 Demo 示例,在柱状图的侧边栏一个个点击查看效果,然后找到你想要的效果图。
从效果图代码修改参数
这不,效果图找到了,对应效果图的代码也找到了,然后看下要怎么修改才能变成堆叠的柱状图呢?
原来是在 add_yaxis 的时候添加了 stack 参数,而且很明显,两个 add_yaxis 设置的 stack 都是一样的,既然如此,我们也这么设置下。
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90], stack="stack1")bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80], stack="stack1")bar.render("myecharts.html")
看下运行效果,果然如此,甚至还可以在 DeepSeek 搜索下 stack 参数的具体用法。
测试造数
我们图表画图自测的时候,就不得不造一些数据了,手动造数的话又太麻烦,pyecharts 团体估计也有此考虑,所以 pyecharts 内置了一个轻量级的 Faker 模块,大家可以看下源码。
from pyecharts.faker import Fakerif __name__ == '__main__':print(Faker.values())print(Faker.choose())print(Faker.provinces)print(Faker.country)print(Faker.animal)print(Faker.guangdong_city)print(Faker.days_values)print(Faker.clock)
[101, 115, 21, 120, 24, 137, 26]
['周一', '周二', '周三', '周四', '周五', '周六', '周日']
['广东省', '北京市', '上海市', '江西省', '湖南省', '浙江省', '江苏省']
['China', 'Canada', 'Brazil', 'Russia', 'United States', 'Africa', 'Germany']
['河马', '蟒蛇', '老虎', '大象', '兔子', '熊猫', '狮子']
['汕头市', '汕尾市', '揭阳市', '阳江市', '肇庆市', '广州市', '惠州市']
[26, 29, 25, 12, 29, 7, 9, 5, 22, 8, 12, 28, 20, 28, 14, 14, 5, 9, 6, 18, 22, 18, 10, 28, 5, 22, 11, 4, 1, 7]
['12a', '1a', '2a', '3a', '4a', '5a', '6a', '7a', '8a', '9a', '10a', '11a', '12p', '1p', '2p', '3p', '4p', '5p', '6p', '7p', '8p', '9p', '10p', '11p']
图片生成
默认是渲染生成的 html,如果要生成图片文件,还需要额外安装依赖。
pip install snapshot-selenium
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshotif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80])# bar.render("myecharts.html")make_snapshot(snapshot, bar.render(), "myecharts.png")
这样就可以生成对应图表的图片了(当然,渲染成图片的话时间花费会久一些)。
柱状图
常规图
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80])bar.render("myecharts.html")
堆叠图
对要堆叠的数据设置相同的 stack 参数即可。
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90], stack="stack0")bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80], stack="stack0")bar.render("myecharts.html")
标签旋转
在 x 轴的标签选项设置旋转度数。
from pyecharts import options as opts
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90], stack="stack0")bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80], stack="stack0")bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),)bar.render("myecharts.html")
设置刷选
设置刷选以后,就可以在界面进行进行圈选操作了。
from pyecharts import options as opts
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90], stack="stack0")bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80], stack="stack0")bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),brush_opts=opts.BrushOpts(),)bar.render("myecharts.html")
数据缩放
可以添加 opts.DataZoomOpts() 设置数据缩放滑动条。
from pyecharts import options as opts
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90], stack="stack0")bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80], stack="stack0")bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),brush_opts=opts.BrushOpts(),datazoom_opts=opts.DataZoomOpts(),)bar.render("myecharts.html")
添加工具箱
可以使用 opts.ToolboxOpts() 添加工具箱,可以进行图片下载,折线图切换等。
from pyecharts import options as opts
from pyecharts.charts import Barif __name__ == '__main__':bar = Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90], stack="stack0")bar.add_yaxis("商家B", [6, 30, 26, 15, 55, 80], stack="stack0")bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),brush_opts=opts.BrushOpts(),datazoom_opts=opts.DataZoomOpts(),toolbox_opts=opts.ToolboxOpts(),)bar.render("myecharts.html")