pyecharts柱状图颜色设置

文章介绍了如何在使用pyecharts进行Python数据可视化,特别是绘制动态GDP柱状图时,通过JavaScript代码动态设置中国的柱状颜色与其他国家区分。通过读取CSV数据,创建时间线并处理数据,然后利用JsCode在pyecharts中运行自定义颜色判断函数,实现了当柱状图的name为中国时,颜色显示为红色,否则为蓝色。在实现过程中需要注意js代码的完整性和逻辑准确性,避免其他柱子颜色出错。
摘要由CSDN通过智能技术生成

前言

        在b站学习python时,做动态GDP柱状图绘制时,弹幕有人问如何将中国的柱状颜色设置的与其他颜色不同,根据视频中的代码没有办法动态设置中国颜色,搜索了一些文章后,在作者:jayvee_ 文章: pyecharts如何给柱形图的每个柱子设置不同颜色的方法基础上修改成功实现。

方法

        利用pyecharts的JSCode工具,运行js代码来实现。思路如下:

        对象结构

         name值是我们需要的"中国",value值是GDP数据,可能存在相同的情况,所以采用name判断。利用pyecharts的JsCode运行以下代码

function (params) {
    if (params.name==('中国')) {
        //红色
        return '#FF0000';
    }else return '#37A2DA'; //蓝色

具体代码如下:

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import *
from pyecharts.commons.utils import JsCode
# 读取数据
f = open("E:\PC_SRC\Desktop\python-study\可视化案例数据\动态柱状图数据\\1960-2019全球GDP数据.csv","r",encoding="UTF-8")
data = f.readlines()
f.close()
data.pop(0)
data_dic = {}
for i_data in data:
    li_data = i_data.split(",")
    y = int(li_data[0])
    c = li_data[1]
    f = float(li_data[2])
    cf_dic = [c,f]
    if(not y in data_dic):
        data_dic[y] = [cf_dic]
    else:
        data_dic[y].append(cf_dic)

# 创建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT})
# 排序年份
yearlist = sorted(data_dic.keys())
for year in yearlist:
    year_data = dict(sorted(data_dic[year] , key=lambda e: e[1],reverse=True))
    # 取前8名国家数据
    x_data = list(year_data.keys())[0:8]
    y_data = list(map(lambda x:round(x/100000000,2),list(year_data.values())))[0:8]
    # 逆转一下
    x_data.reverse()
    y_data.reverse()
    # 构建柱状图
    bar = Bar()
    bar.add_xaxis(x_data)
    # 此处为修改颜色的js代码,判断params的名字是否为中国
    color_function = "function (params) {if (params.name==('中国')) {return '#FF0000';}else return '#37A2DA'}"
    bar.add_yaxis("GDP(亿)",y_data,label_opts=LabelOpts(position="right"),itemstyle_opts=ItemStyleOpts(color=JsCode(color_function)))
    bar.reversal_axis()
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}全球前8GDP数据")
    )
    timeline.add(bar, str(year))



# 时间线自动播放
timeline.add_schema(
    play_interval=1000,
    is_auto_play=True,
    is_loop_play=False,
    is_timeline_show=True
)
# 绘图
timeline.render("1960-2019全球GDP前8国家.html")

绘制效果

 避坑

        如果js代码中不加else,其它柱子就会变透明,如果else返回的颜色错误,就会出现其他国家也会变红的bug,如图

 总结

        还在学习中,我觉得这种方法可能比较麻烦,应该有更方便的方法来实现,希望会的大佬在评论区补充一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值