如何在Matplotlib中将概率密度函数(PDF)叠加到基线图上
用Matplotlib将概率分布叠加到基线图上
我需要把概率分布曲线叠加到基线曲线图上,实现类似PowerPoint中复制、旋转、压缩图表后的效果。要求关闭PDF图的坐标轴,且PDF的右边缘(直边)要放在x=0.1125的位置。
以下是最小可复现示例(MRE):
示例PDF图代码
# 导入Python库 import numpy as np import matplotlib.pyplot as plt from scipy import stats # 绘制示例PDF x1 = np.logspace(start=np.log(0.1), stop=np.log(3), num=200, base=np.e) ln_mu, ln_sigma = 1.1, 0.3 y1 = np.exp(stats.norm.pdf(x1, ln_mu, ln_sigma)) fig, ax = plt.subplots() ax.fill_between(x1, min(y1), y1, alpha=0.5) ax.set(xscale="log", xlim=[min(x1), max(x1)]) plt.show()
示例PDF图:对数X轴的填充曲线,呈现正态分布的概率密度形态,填充区域透明度为0.5。
示例基线曲线图代码
# 绘制示例基线曲线 x2 = np.arange(0, 1.05, 0.05) y2 = 2*np.sqrt(np.pi*x2) fig, ax = plt.subplots() ax.plot(x2,y2) ax.set(yscale="log", ylim=[min(x1), max(x1)]) plt.show()
示例基线曲线图:对数Y轴的曲线,符合2*sqrt(πx)的函数走势。
预期效果:基线图上叠加经过旋转、压缩后的PDF分布,PDF的右边缘对齐在x=0.1125处,PDF自身的坐标轴完全隐藏。
实现代码
核心思路是利用Matplotlib的嵌入坐标轴,对其做旋转、缩放变换后绘制PDF,最后隐藏嵌入轴的所有元素。
import numpy as np import matplotlib.pyplot as plt from scipy import stats from matplotlib.transforms import Affine2D # 1. 绘制基线曲线 x2 = np.arange(0, 1.05, 0.05) y2 = 2*np.sqrt(np.pi*x2) fig, ax = plt.subplots(figsize=(8, 6)) ax.plot(x2, y2) ax.set(yscale="log", ylim=[0.1, 3], xlabel="X", ylabel="Y") # 2. 准备PDF数据:反转x轴让直边移到右侧 x1 = np.logspace(start=np.log(0.1), stop=np.log(3), num=200, base=np.e) ln_mu, ln_sigma = 1.1, 0.3 y1 = np.exp(stats.norm.pdf(x1, ln_mu, ln_sigma)) x1_reversed = x1[::-1] y1_reversed = y1[::-1] # 3. 创建嵌入坐标轴并设置变换 # 嵌入轴位置:[左, 下, 宽, 高],单位为基线轴的占比 inset_ax = ax.inset_axes([0, 0, 0.15, 0.5]) # 顺时针旋转90度+垂直缩放,匹配预期形态 transform = Affine2D().rotate_deg(-90).scale(1, 0.8) + inset_ax.transData inset_ax.set_transform(transform) # 4. 绘制PDF并设置轴范围 inset_ax.fill_between(x1_reversed, min(y1_reversed), y1_reversed, alpha=0.5) inset_ax.set(xscale="log", xlim=[min(x1), max(x1)]) # 5. 隐藏嵌入轴的所有可见元素 inset_ax.set_xticks([]) inset_ax.set_yticks([]) inset_ax.spines[['top', 'right', 'bottom', 'left']].set_visible(False) plt.tight_layout() plt.show()
代码说明:
- 反转PDF的x数据,让原左侧的直边移到右侧,方便对齐基线图的x=0.1125位置
- 通过
Affine2D实现旋转变换和缩放,匹配预期的倾斜压缩效果 - 完全隐藏嵌入轴的刻度和边框,只保留填充的PDF区域
内容的提问来源于stack exchange,提问作者a11
相关产品推荐
相关产品推荐

