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

Matplotlib直方图xticks与bins不匹配,柱子重叠问题求助

直方图区间柱重叠问题解决方案

使用plt.hist绘制直方图时,出现区间柱(bins)重叠的情况,已尝试调整坐标轴尺寸和width参数,问题仍未解决。

用户代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 假设data和loc是已定义变量
intervals = np.arange(0.5, max(data)+0.5, .5)
data = np.array(data)

# build labels list
labels = [ str(intervals[i])+'-'+str(intervals[i+1]) for i in range(len(intervals)-1) ]
labels.append(str(max(intervals))+'-'+str(max(intervals)+.5))

# plot
fig, ax = plt.subplots(figsize=(12, 9))
plt.hist(x=data, bins=intervals, width=1)
ax.set_xticks(range(len(intervals)))
ax.set_xticklabels(labels=labels, rotation=45, fontsize=12)
ax.set_title("Max wind speed ~24hr before dust emission ("+loc+")", fontsize=18)
ax.set_xlabel('Wind Speed [m/s]', fontsize=14)
ax.set_ylabel('No. of Events', fontsize=14)
plt.grid(True)
plt.tight_layout()
plt.savefig('th_hist'+loc+'.png')
plt.show()

问题原因及解决方法

  • 重叠核心原因:你设置的width=1和bins的间隔(0.5)完全不匹配。bins的区间步长是0.5,柱子宽度设为1会直接超出自身区间,和相邻柱子重叠。
  • 修正步骤:
    1. 移除width参数:plt.hist会根据bins的间隔自动计算合适的柱子宽度,手动指定反而会导致错位。
    2. 修正刻度与标签对应关系:当前把刻度放在range(len(intervals))是基于索引的位置,和实际的风速数值轴不对应,会导致标签错位。应该把刻度放在每个区间的中间位置,或者直接对应bins的分界点。
    3. 简化标签生成:不需要额外append最后一个标签,原列表推导式已经覆盖了intervals所有相邻元素组成的区间,额外添加会导致标签数量比区间数多一个,和刻度不匹配。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

intervals = np.arange(0.5, max(data)+0.5, .5)
data = np.array(data)

# 生成对应所有区间的标签,无需额外添加
labels = [f"{intervals[i]:.1f}-{intervals[i+1]:.1f}" for i in range(len(intervals)-1)]

fig, ax = plt.subplots(figsize=(12, 9))
# 移除width参数,让matplotlib自动适配,添加edgecolor让柱子边界更清晰
plt.hist(x=data, bins=intervals, edgecolor='black')

# 将刻度放在每个区间的中间位置,和标签一一对应
ax.set_xticks(intervals[:-1] + 0.25)
ax.set_xticklabels(labels, rotation=45, fontsize=12)

ax.set_title(f"Max wind speed ~24hr before dust emission ({loc})", fontsize=18)
ax.set_xlabel('Wind Speed [m/s]', fontsize=14)
ax.set_ylabel('No. of Events', fontsize=14)
plt.grid(True, axis='y')  # 只显示y轴网格,避免x轴网格和柱子重叠
plt.tight_layout()
plt.savefig(f'th_hist{loc}.png')
plt.show()

内容的提问来源于stack exchange,提问作者Doron bs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:20:36