Pyplot分组柱状图所有柱子重叠显示在周一位置问题
问题解决:分组柱状图重叠且仅显示周一数据
问题原因
你的代码里plt.bar((j-4)/10, pdChart[j], width, ...)的x轴参数是固定值,所有品类的柱子都被画在了同一个x坐标位置(对应周一),且没有将每个品类的7天数据对应到一周7天的x轴位置上,导致只有周一位置有重叠柱子,其他日期无数据。
修正后的代码
import matplotlib.pyplot as plt import numpy as np # 定义星期列表 daysOWeek = ['周一','周二','周三','周四','周五','周六','周日'] # 你的订单数据 pdChart = np.array([ [420, 352, 425, 391, 423, 388, 387], [0, 0, 0, 0, 0, 0, 0], [857, 840, 881, 900, 852, 851, 874], [248, 234, 246, 239, 242, 223, 249], [235, 243, 227, 249, 270, 251, 249], [1670, 1822, 1835, 1818, 1796, 1804, 1764], [427, 461, 430, 490, 428, 435, 444], [102, 101, 94, 86, 102, 110, 107], [718, 743, 718, 705, 741, 781, 716] ]) # 品类名称字典(按你的实际数据调整) flavors = {f'品类{i+1}': i for i in range(9)} plt.figure(1) x = np.arange(7) width = 0.1 category_count = 9 # 循环绘制每个品类的7天数据 for j in range(category_count): # 计算每个品类柱子的x偏移,让同星期的柱子并排且居中 bar_x = x + width * (j - (category_count - 1)/2) plt.bar(bar_x, pdChart[j], width, label=list(flavors.keys())[j]) # 设置x轴刻度与星期对应,位置对齐分组中心 plt.xticks(x + width*(category_count-1)/2 - width/2, daysOWeek) plt.ylabel("订单量") # 图例放在外侧避免遮挡 plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.title("各品类偏好送达星期分布") plt.tight_layout() plt.show()
关键修正点
- x轴位置计算:将每个品类的柱子x坐标改为
x + width*(j - (category_count-1)/2),确保同一星期的不同品类柱子并排显示,且每组柱子居中对齐到星期刻度。 - 刻度位置调整:调整
plt.xticks的位置,让星期标签精准对应到每组柱子的中心。 - 布局优化:用
tight_layout()自动调整图表布局,避免元素重叠。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

