Matplotlib单图多绘:折线图+指定X轴长度的水平直方图实现求助
解决Matplotlib水平直方图X轴长度固定问题
需求说明
- X轴取值范围0至10,Y轴取值范围0至60
- 区间[0,10]内每个i对应10000条数据,黑色折线为各i对应数据的均值
- 在指定i值(如i=2、i=6)处绘制水平直方图,必须启用
density=True参数,且所有直方图在X轴方向长度固定为3(例如i=2的直方图从X=2延伸至X=5,i=6的从X=6延伸至X=9)
问题分析
原代码未指定直方图的宽度参数,导致X轴方向长度过小,无法满足需求。通过设置width参数可直接控制水平直方图在X轴的延伸长度。
修改后的代码
import numpy as np import matplotlib.pyplot as plt # 生成数据 x = range(11) res = np.random.randint(0, 60, size=(11, 10000)) means = [res[i, :].mean() for i in x] # 创建画布和轴 fig, ax = plt.subplots(figsize=(12, 6), dpi=300) # 绘制均值折线 ax.plot(x, means, color='black', label='均值') # 绘制指定i的水平直方图,固定X轴长度为3 # i=2的直方图:从X=2延伸至X=5 ax.hist(res[2, :], bins=100, density=True, orientation='horizontal', bottom=2, width=3, color='gray', alpha=0.7, label='i=2数据分布') # i=6的直方图:从X=6延伸至X=9 ax.hist(res[6, :], bins=100, density=True, orientation='horizontal', bottom=6, width=3, color='lightblue', alpha=0.7, label='i=6数据分布') # 设置坐标轴范围与标签 ax.set_xlim(0, 10) ax.set_ylim(0, 60) ax.set_xlabel('X') ax.set_ylabel('Y') ax.legend() plt.show()
关键修改点
width=3:当orientation='horizontal'时,该参数控制直方图在X轴方向的长度,确保从bottom指定的i值延伸3个单位- 每个直方图通过
bottom参数对齐到X轴对应的i位置 - 添加
alpha参数设置透明度,避免直方图遮挡均值折线 - 明确设置坐标轴范围,保证所有元素完整显示
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

