pyecharts如何使用formatter回调函数的问题
作者:威斯登
pyecharts使用formatter回调函数
说明
笔者使用的pyecharts版本是1.7.1,如果使用0.x版本不知道是否可行,因为两个版本代码差异较大。
查看官方文档发现,formatter参数支持字符串模板和回调函数两种形式,其中字符串模板显示有四个选项:{a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)。
如下图:
可以使用formatter=‘{c}’显示数值,将其写入LabelOpts里,.add()代码如下:
.add( type_="effectScatter", series_name="", data_pair=data, symbol_size=10, effect_opts=opts.EffectOpts(), label_opts=opts.LabelOpts( position="top", is_show=True, #is_show是否显示标签,点上面的内容 formatter='{c}', ), itemstyle_opts=opts.ItemStyleOpts(), is_selected=True, #选中图例 )
运行尝试一下,如图:
发现每个散点上方显示的的一个数组[经度值,纬度值,数据值],但是我只想要显示数据值。
笔者查了很多帖子最后又查了官方文档,发现可以使用回调函数解决。
代码如下:首先要导入一个包:
from pyecharts.commons.utils import JsCode
然后为formatter参数写回调函数,.add()代码如下:
.add( type_="effectScatter", series_name="", data_pair=data, symbol_size=10, effect_opts=opts.EffectOpts(), label_opts=opts.LabelOpts( position="top", is_show=True, #is_show是否显示标签,点上面的内容 formatter=JsCode( #formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数 """function(params) { if ('value' in params.data) { return params.data.value[2]; } }""" ),#显示数据,可以去掉经纬度只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1]; ), itemstyle_opts=opts.ItemStyleOpts(), is_selected=True, #选中图例 )
通过params.data.value[i]可以显示数组对应的值,例如params.data.value[0]显示经度值;params.data.value[1]显示纬度值;params.data.value[2]显示数据值。
params.data.name可以显示数据名。
运行看一下,如图:
可以看到,显示的正是数据值。
用Jupyter Notebook来调试pyecharts中的formatter回调函数
在pyecharts中,各种Label等文字输出可以用formatter进行格式化。
但formatter那个写法看起来实在让人费解,还要各种图形的命名规则不同。
而formatter 可以接收一个回调函数来格式化出书。我发现这个回调函数居然是直接写js代码。既然它会直接渲染到前端的javascript中,那么我们可以直接加入console.log来输出params,看看里面到底是什么。
console.log的输出在哪里看?用jupyter notebook来运行你的pyechart代码,然后直接在浏览其中F12打开开发调试工具,就可以在console中看到输出了。
当然也不一定要用Jupyter notebook。pyecharts直接输出html后,在浏览器中打开,然后f12也行。不过用Jupyter notebook会方便很多,直接在浏览其中修改代码,直接看结果,直接调试。
formatter=JsCode( """function(params) { console.log(params.data); return params.data[2]; }""" )
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。