pyecharts使用记录

最近需要完成一个绘图任务,本来一直用matplotlib绘图,但是系统前端用的echart,为了保持统一,以及echart绘图的确好看,决定还是用一下pyechart,没想到中间遇到不少问题。

问题一、版本问题导致的教程无法适用

上来直接google教程,想要先出一个图看看。

结果看到的教程基本是这样的


from pyecharts import Bar

bar = Bar("我的第一个图表", "这里是副标题")

bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])# bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用

bar.render()    # 生成本地 HTML 文件

结果一跑,直接报错


ImportError: cannot import name 'Bar' from 'pyecharts'

显然肯定是版本问题,于是我这个时候想还是去找官方文档吧,看到官方文档里明晃晃写着:

很显然,我安装的是最新版本。

于是换成代码


from pyecharts.charts import Bar

bar = Bar()

bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])

bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])

# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件

# 也可以传入路径参数,如 bar.render("mycharts.html")

bar.render()

成功。

问题二、markArea绘制

我的图需要对中间某一块进行强调,echart插件是有markArea功能的,那pyechart肯定也有。

这个时候,我已经学聪明了,知道官方文档大概率是有的。于是一直在官方文档看怎么绘制出我想要的结果。

结果没有找到==

然后我直接用pyechart martarea进行搜索,结果没搜到什么有价值的。

没办法,我就直接看了源码,果然,明晃晃的MarkAreaOpts。

help搜索方法

于是,我又返回到官方文档。

因为知道了opts是配置项,于是我这次成功找到了,之前一直直奔图表一栏......

官方文档配置项

但是,文档里基本就是解释了一下参数,并没有example...

但我再次翻阅的时候,在系列配置项最前面看到一句:


Note: 配置项章节应该配合图表类型章节中的 example 阅读。

我觉得我终于找到了地方。胜利大概就在眼前。

没错,翻了好几个line的例图,终于让我找到一个类似的。

没错!!!就是他!!!

官方文档折线图

至此,画图问题应该解决了。但是我最终需要图片格式,于是我又遇到了问题。

问题三、保存成图,而不是html

我的任务需要直接插入图,html显然无法满足要求。

网上也是有教程的。

比如 https://www.cnblogs.com/my-global/articles/12662614.html

基本方案就是先安装phantomjs,再安装node.js,最后再安装pyecharts-snapshot就可以了。

遗憾的是,我按照流程安装完之后,直接存成png格式,显示文件无法打开。

再各种尝试无果之后,我又打开官方文档(果然,官方文档才是最可靠的==)

渲染图片

按照渲染图片下的snapshot-phantomjs方法,成功绘制出图。可把我开心坏了,但是呢,我最后是要在虚机上起任务的,所以我又把代码转移到虚机上,按照上述一番操作之后,运行我的测试代码。

结果,又又又失败了。。。。。。

失败图

这个图上所有的数字、字符全部都无法展示,我还把所有中文都换成了英文,又把渲染等待时间拉长,都不行。

又是一通google,结果找不到相同的问题。

无意中看到一个说可能有字体问题的,于是我死马当成活马医。在虚机上输入


yum install bitmap-fonts bitmap-fonts-cjk

不抱希望地重新跑脚本,结果

成功图

成功了!!!!!

最后,贴一下坎坷的这短短的测试代码。


from pyecharts.charts import Line

from pyecharts import options as opts

from snapshot_phantomjs import snapshot

from pyecharts.render import make_snapshot

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]

v1 = [5, 20, 36, 10, 75, 90]

v2 = [10, 25, 8, 60, 20, 80]

line=Line()

line.add_xaxis(attr)

line.add_yaxis("商家B", v2)

line.add_yaxis("商家A", v1)

line.set_series_opts(markarea_opts=opts.MarkAreaOpts(

            is_silent=False,

            data=[

                opts.MarkAreaItem(

                    name="商家A",

                    x=(attr[3], attr[4]),

                    label_opts=opts.LabelOpts(is_show=False),

                    itemstyle_opts=opts.ItemStyleOpts(color="#DCA3A2", opacity=0.5),

                )

            ],

        ))

line.render(path='snapshot.html', pixel_ratio=3)

make_snapshot(snapshot,'snapshot.html', 'snapshot.png')

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容