pyecharts的学习之旅--柱形图篇2--为标签添加千位符
本篇的柱形图只讲一个内容,那就是:将之前绘制的图形中的数字标签加上千位分隔符(如下两幅图对比);
这个真的只能说“会者不难,难者不会“(测试途中陷入了一次死循环。。。)
可以看到,有了千位分隔符之后数据变得更加清晰。
接下来就开始吧!
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyechsrts.commons.utils import JsCode
这次因为是要对标签进行自定义设置,所以需要用到回调函数,所以导入了JsCode
,注意js
语句只有封装在JsCode
里才能使用哦。
废话不多说,基础操作,直接上代码,还是一样的数据。
bar_label_alter = (
Bar()
.add_xaxis(type_price["品种"].tolist())
.add_yaxis("总价值", type_price["总价/采购价"].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="酒类价值柱形图"))
)
bar_label_alter.render_notebook()
这些打完就会出现下图:
这属于是对标签设置,即Labelopts
,它在系列设置里,因此需要在原有代码上再进行添加:
bar_label_alter.set_series_opts(
label_opts=opts.LabelOpts(
position="top",
font_size=15,
font_family="Microsoft YaHei",
font_weight="bold"
)
)
在这里里可以对标签的字体、大小、位置等进行设置,我的标签位置设置为顶端(即默认),字体大小为15,用微软雅黑,并加粗。最后见下图:
接下来就是本篇重头戏了,我直接在上面代码基础上添加:
bar_label_alter.set_series_opts(
label_opts=opts.LabelOpts(
position="top",
font_size=15,
font_family="Microsoft YaHei",
font_weight="bold",
formatter=JsCode(
"""function(params){
let num = String(params.data),
temp_list = [];
for(let i=num.length-1, j=1; i>=0; i--, j++){
temp_list.push(num[i]);
if(j%3==0 && i!=0){
temp_list.push(',')
}
}
return temp_list.reverse().join('') + '元';
}"""
)
)
)
formatter
之后就是我们的重点:使用js
代码,人为从后遍历数值,然后每隔三个数插入一个,
号。
这里有几点要注意的:
a. JsCode
里的内容一定全部是在引号里的,如果是多行,要用三引号;
b. 因为外层用单引号或双引号围起来了,那么写js
中如果有字符型数据,一定要用与外围相反的引号(你外面用双引号,里面就用单引号;反之亦然)
c. 没有js
基础的童鞋直接按照上述代码一个个敲进去,不要粘贴复制,不要问为什么(往深走了之后会慢慢了解的)
感兴趣的可以使用
python
来编写一个具有同样功能的代码(不要format()
函数,自己试着编写一个,搞清逻辑,再去拆解js
的语言结构;一门通,样样通,其实都千篇一律,但关键是要自己去想去做。
那现在放上完整代码,并运行看看效果:
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
bar_label_alter = (
Bar()
.add_xaxis(type_price["品种"].tolist())
.add_yaxis("总价值", type_price["总价/采购价"].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="酒类价值柱形图"))
)
bar_label_alter.set_series_opts(
label_opts=opts.LabelOpts(
position="top",
font_size=15,
font_family="Microsoft YaHei",
font_weight="bold",
formatter=JsCode(
"""function(params){
let num = String(params.data),
temp_list = [];
for(let i=num.length-1, j=1; i>=0; i--, j++){
temp_list.push(num[i]);
if(j%3==0 && i!=0){
temp_list.push(',')
}
}
return temp_list.reverse().join('') + '元';
}"""
)
)
)
bar_label_alter.render_notebook()
也可以把系列配置也放入链式中。
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
bar_label_alter = (
Bar()
.add_xaxis(type_price["品种"].tolist())
.add_yaxis("总价值", type_price["总价/采购价"].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="酒类价值柱形图"))
.set_series_opts(
label_opts=opts.LabelOpts(
position="top",
font_size=15,
font_family="Microsoft YaHei",
font_weight="bold",
formatter=JsCode(
"""function(params){
let num = String(params.data),
temp_list = [];
for(let i=num.length-1, j=1; i>=0; i--, j++){
temp_list.push(num[i]);
if(j%3==0 && i!=0){
temp_list.push(',')
}
}
return temp_list.reverse().join('') + '元';
}"""
)
)
)
)
bar_label_alter.render_notebook()
最终结果:
其实,操作几遍之后就发现这确实不难,而且一次性写完就可以重复使用千位符的添加方式,非常方便呦!