Matplotlib Histograms异常:部分条形缺失的解决求助
解决Matplotlib直方图条形缺失问题
问题原因
你遇到的条形缺失/显示异常,是因为bins=10的设置和你的整数型数据不匹配。你的final_tails存储的是10次抛硬币的正面次数,取值范围是0到10的整数(共11个可能值),但bins=10只会生成10个区间,导致部分整数对应的区间划分不合理,进而出现条形缺失的视觉效果。
解决方案
以下几种方法都可以解决这个问题:
方法1:手动设置适配整数的bins边界
直接指定bins的边界为每个整数的中间位置,让每个整数对应独立的条形:
plt.hist(final_tails, bins=np.arange(-0.5, 11.5))
这样每个整数x会被划分到[x-0.5, x+0.5]的区间内,所有可能的取值都会有对应的条形,不会出现缺失。
方法2:自动选择最优bins
让Matplotlib根据数据分布自动计算合适的bins数量,只需替换bins=10为bins='auto':
plt.hist(final_tails, bins='auto')
这种方式无需手动计算,能自动适配数据的分布情况。
方法3:根据唯一值数量设置bins
如果明确知道数据的唯一值数量,可以直接设置bins为唯一值的个数:
plt.hist(final_tails, bins=len(np.unique(final_tails)))
这里np.unique(final_tails)会返回所有可能的取值,len()得到11,刚好对应0到10的11个整数,生成的每个区间都会对应一个整数取值。
修改后的完整代码示例
import numpy as np import matplotlib.pyplot as plt np.random.seed(123) final_tails = [] for x in range(100) : tails = [0] for x in range(10) : coin = np.random.randint(0,2) tails.append(tails[x] + coin) final_tails.append(tails[-1]) # 使用方法1的bins设置 plt.hist(final_tails, bins=np.arange(-0.5, 11.5)) plt.show()
内容的提问来源于stack exchange,提问作者CangZzz
相关产品推荐
相关产品推荐

