Matplotlib绘制X轴不同的堆叠柱状图时数组不匹配问题
解决Matplotlib堆叠柱状图数据对齐问题
要解决两组数据尺寸不匹配的问题,核心是把第二组数据(rates1/counts1)按照主数据的rate标签自动补0对齐,不用硬编码。具体步骤如下:
步骤1:将第二组数据转为字典映射
先把rates1和counts1组合成字典,快速通过rate值找到对应的count,避免手动匹配:
# 构建rate到count的映射字典 rate_count_map = dict(zip(rates1, counts1))
步骤2:生成对齐后的counts数组
遍历主数据的rates列表,对每个rate值,从字典中取出对应的count,没有的就填0,得到的新数组和主counts长度完全一致:
# 生成对齐后的counts1数组 counts1_aligned = [rate_count_map.get(rate, 0) for rate in rates]
步骤3:绘制堆叠柱状图
用matplotlib的bar函数,主数据作为基底,上层数据通过bottom参数指定堆叠在主数据上方:
import matplotlib.pyplot as plt rates = [4, 4.1, 4.2, 4.3, 4.4, 4.5] counts = [12, 17, 22, 9, 12, 18] rates1 = [4.3, 4.4] counts1 = [24, 17] # 数据对齐处理 rate_count_map = dict(zip(rates1, counts1)) counts1_aligned = [rate_count_map.get(r, 0) for r in rates] # 绘制堆叠柱状图 x = range(len(rates)) # 用索引作为x轴位置 plt.bar(x, counts, label='基底数据') plt.bar(x, counts1_aligned, bottom=counts, label='堆叠数据') # 设置x轴标签为rate值 plt.xticks(x, rates) plt.xlabel('Rate') plt.ylabel('Count') plt.legend() plt.show()
这样处理后,堆叠数据会准确对应到对应的rate位置,缺失的rate自动补0,不会出现尺寸不匹配的报错,也不用手动硬编码补0的位置。
内容的提问来源于stack exchange,提问作者Joe Smart
相关产品推荐
相关产品推荐

