如何调整直方图分箱,解决低质量星系质量显示为0及X轴刻度不均问题?
问题描述
- 绘制低质量星系质量直方图时,质量小于1太阳质量的星系被显示为0太阳质量,希望让这些低质量值正常显示,同时将质量区间放大到0-3太阳质量。
- 尝试绘制简单直方图,但X轴刻度不均匀,不清楚原因。
尝试的代码
plotlist = [] for halo in simSats: mvir = simSats[halo]['Mvir'] plotlist.append(mvir) plotlist = np.asarray(plotlist) plt.hist(plotlist)
数据输出
[1.75353080e+10 1.03454986e+10 1.17512034e+10 9.68613814e+09 6.40655649e+09 5.04409401e+09 3.82798081e+09 5.80222974e+09 1.04027038e+10 1.79983011e+10 1.95137540e+10 1.78910879e+10 1.27659438e+10 1.81947913e+10 1.39142197e+10 1.13183104e+10 1.03982277e+10 8.63489862e+09 7.42876035e+09 5.22600018e+09 7.85432543e+09 4.75491031e+09 7.78396769e+09 9.69021839e+09 4.93969876e+10 1.43326361e+10 1.63058245e+10 3.20865485e+09 4.37412955e+09 1.14915472e+10 1.88181032e+10 4.67712244e+09 1.13262254e+10 7.06200967e+09 8.49164480e+09 1.01777059e+10 1.98494915e+10 6.07897332e+09 1.80687635e+10 4.31756164e+09 6.01830299e+09 4.24692572e+09 6.61822346e+09 2.01933360e+10 6.65404721e+09 4.35807966e+09 2.31729702e+10 1.79621449e+10 4.97159178e+09 6.10014339e+09 5.74926372e+10 3.87533252e+10 3.33590476e+09 5.43237319e+10 2.45991599e+10 1.26613191e+10 1.09971690e+10 7.81951398e+09 1.22671623e+10]
解决方案
1. 解决低质量显示为0的问题
从输出的plotlist数据来看,所有数值都是10^9量级,说明你当前的质量单位是10亿太阳质量,而非太阳质量。这就是小于1太阳质量的星系显示为0的原因——在10亿太阳质量的尺度下,1太阳质量可忽略不计。
解决步骤:
- 先将数据转换为太阳质量单位;
- 筛选0-3太阳质量的样本,手动指定bins绘制直方图:
# 转换为太阳质量 plotlist_solar = plotlist / 1e9 # 筛选0-3太阳质量的样本 low_mass = plotlist_solar[(plotlist_solar >= 0) & (plotlist_solar <= 3)] # 绘制直方图,指定均匀分布的bins plt.hist(low_mass, bins=np.linspace(0, 3, 31)) # 31个bin对应0-3太阳质量,步长0.1 plt.xlabel('质量 (太阳质量)') plt.ylabel('数量') plt.xlim(0, 3) plt.show()
2. 解决X轴刻度不均匀的问题
默认的plt.hist()会自动选择bins,当数据分布范围过大时(比如你的原始数据跨度从3e9到5e10),自动bins会导致刻度不均匀。解决方法是手动指定bins的范围和数量:
- 若查看全范围数据,可使用对数刻度和对数分布的bins:
plt.hist(plotlist, bins=np.logspace(np.log10(plotlist.min()), np.log10(plotlist.max()), 50)) plt.xscale('log') plt.xlabel('质量 (10^9 太阳质量)') plt.ylabel('数量') plt.show()
- 若只关注低质量区间,使用上述筛选后的
low_mass数据,配合linspace生成均匀bins,再通过xlim锁定X轴范围,即可得到均匀刻度。
内容的提问来源于stack exchange,提问作者Oge Okoronkwo
相关产品推荐
相关产品推荐

