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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:35:31