pyecharts的学习之旅--柱形图篇2--为标签添加千位符

本篇的柱形图只讲一个内容,那就是:将之前绘制的图形中的数字标签加上千位分隔符(如下两幅图对比);

这个真的只能说“会者不难,难者不会“(测试途中陷入了一次死循环。。。)

在这里插入图片描述

可以看到,有了千位分隔符之后数据变得更加清晰。

接下来就开始吧!

  1. 导入模块
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyechsrts.commons.utils import JsCode

这次因为是要对标签进行自定义设置,所以需要用到回调函数,所以导入了JsCode,注意js语句只有封装在JsCode里才能使用哦。

  1. 绘制好图像

废话不多说,基础操作,直接上代码,还是一样的数据。

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()

这些打完就会出现下图:

在这里插入图片描述

  1. 设置千位分隔符

这属于是对标签设置,即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()

最终结果:

在这里插入图片描述

其实,操作几遍之后就发现这确实不难,而且一次性写完就可以重复使用千位符的添加方式,非常方便呦!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值