如何使用python绘制渐变色的柱状堆积图
前言
python 版本:3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52)
演示环境:jupyter-lab
备注:这里默认大家都已经安装了 python 及其相关的工具包。 导入依赖包import numpy as np import matplotlib.pyplot as plt import pickle import os获取文件列表,为后面读取数据做准备
在绘制柱状堆积图之前,我们需要为其准备好用于展示的数据。这里我从准备好了的 pickle 文件中进行读取,所以需要先获取文件列表。 我们在解决实际问题时,每个人的数据不尽相同,所以大家可以视自己的情况而定,总之是要为获取数据做准备。 file_dir = "./pickle/" file_list = os.listdir(file_dir) x_label = [] for filename in file_list: temp_str = filename.split(".")[0] label = temp_str.split("_")[1] x_label.append(label) print("length of file_list: {}".format(len(file_list))) print(file_list) print(x_label)加载数据,使用 bar 函数绘制渐变色柱状堆积图
我们将调用 bar 函数来绘制柱状图。渐变色的关键在于我们设置了自定义颜色,且颜色随着柱状图层次堆积按比例变化。 代码如下: fig = plt.figure(figsize=(10,10), dpi=150) ax = fig.add_subplot(111) # 设置字体,以便支持中文显示 plt.rcParams["font.sans-serif"] = [u"Microsoft YaHei"] x = np.arange(len(x_label)) bottom_y = [] for i in range(len(x_label)): bottom_y.append(0.0) bottom_y = np.array(bottom_y) top_k = 10 for i in range(top_k): change_pct_list = [] bar_width = 0.25 for filename in file_list: file_path = file_dir + filename f = open(file_path, "rb") concept_stock_list = pickle.load(f) f.close change_pct_list.append(concept_stock_list[top_k-i-1]["平均涨跌幅"]) y = np.array(change_pct_list) # 颜色按层次进行比例变化 red_val = i * (1/top_k) green_val = 0.4 - i*(0.3/top_k) ax.bar(x, y, color=(red_val, green_val, 0.1), bottom=bottom_y, tick_label=x_label, width=bar_width) bottom_y += y image_path = "pickle/渐变色的柱状堆积图.jpg" fig.savefig(image_path)
运行以上代码,就可以看到如下图所示的渐变色柱状堆积图了。
为柱状堆积图添加文字标签
为了效果好看一些,我们还可以为柱状堆积图添加数据对应的标签。数据的标签,我这里依然从前面准备好的 pickle 文件中获取。 for i,filename in enumerate(file_list): file_path = file_dir + filename f = open(file_path, "rb") concept_stock_list = pickle.load(f) f.close text_y = 0.0 for j in range(top_k): text_label = concept_stock_list[top_k-j-1]["name"] change_pct = concept_stock_list[top_k-j-1]["平均涨跌幅"] stocks_num = len(concept_stock_list[top_k-j-1]["stocks"]) text_label = "{:.2f}".format(change_pct) + "% " + text_label + "[{}]".format(stocks_num) ax.text(i, text_y+change_pct/2, text_label, ha="left") text_y += change_pct ax.set_xlabel("日期") ax.set_ylabel("平均涨跌幅") ax.set_title("2023行业热度堆积图",fontsize=10) image_path = "pickle/加文字标签的渐变色柱状堆积图.jpg" fig.savefig(image_path)
添加标签后的效果图如下:
结语
使用 python 绘制渐变色的柱状堆积图的方法,大致就是上面描述的这几个步骤了,希望对大家有所帮助。有问题欢迎在评论区讨论。