You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:17:32