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

设置轴范围时Matplotlib plt.hist2d的2D直方图无法完全填充底色

解决2D直方图固定轴范围后无法完全填充的问题

问题根源在于你先基于数据范围自动生成直方图的bin,再手动扩大轴范围,导致超出数据范围的区域没有对应bin,自然显示空白。要让直方图完全覆盖指定轴范围,必须在绘制hist2d时就指定bin的边界范围,而非依赖自动生成的bin。

修改后的完整代码

import matplotlib.pyplot as plt
import numpy as np

X, Y = np.loadtxt('dihedral.txt', delimiter=',', unpack=True)

# 手动指定x、y轴的bin边界,确保完全覆盖(0,360)和(90,180)范围
# linspace生成的边界点数量=bin数+1,这里保持200个bin和原代码一致
x_bins = np.linspace(0, 360, 201)
y_bins = np.linspace(90, 180, 201)

plt.hist2d(X, Y, bins=[x_bins, y_bins], cmap='jet')
cb = plt.colorbar()
cb.set_label('counts in bin')

# 此时轴范围已由bin边界确定,无需再手动设置xlim/ylim(设置也不会有问题)
# plt.ylim(90, 180) 
# plt.xlim(0, 360)

plt.title('title')
plt.xlabel('dihedral angle')
plt.ylabel('angle of bend')

plt.savefig('dihedral.png', dpi=300)

核心逻辑说明

  • 原代码的bins=200是让matplotlib根据数据的最小/最大值自动生成bin,后续扩大轴范围时,超出数据的区域没有对应bin,所以显示空白。
  • 手动指定bins=[x_bins, y_bins]后,bin会完全覆盖你需要的轴范围,即使某个bin无数据(计数为0),也会用颜色映射的最低值填充,实现整个图表被颜色覆盖的效果。
  • 若要保持bin数量不变,linspace的第三个参数设为「bin数+1」即可,比如200个bin对应201个边界点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:06:18