如何并排绘制两个QQ图?附可复现代码寻求解决方案
解决QQ图并排绘制在独立子图的问题
你当前代码把两个QQ图叠加在同一坐标轴,是因为只创建了单个子图对象,两次调用stats.probplot都复用了同一个坐标轴。要实现并排的独立子图,只需要创建多子图布局,给每个QQ图分配单独的坐标轴即可。
修改后的完整代码如下:
import matplotlib.pyplot as plt import seaborn as sns from scipy import stats df = sns.load_dataset('tips') x, y = df['total_bill'], df['tip'] # 创建1行2列的子图布局,获取两个独立坐标轴 fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5)) # 分别在两个子图绘制QQ图 stats.probplot(x, dist='norm', plot=ax1) stats.probplot(y, dist='norm', plot=ax2) # 设置子图标题和整体标题 ax1.set_title('QQ Plot: total_bill vs 正态分布') ax2.set_title('QQ Plot: tip vs 正态分布') fig.suptitle('两组数据的QQ图对比', y=1.02) # y参数调整整体标题位置,避免和子图标题重叠 # 自动调整子图间距,避免元素挤压 plt.tight_layout() plt.savefig('qq.png', dpi=300) plt.show()
关键说明:
plt.subplots(nrows=1, ncols=2):创建1行2列的子图网格,返回的ax1和ax2是两个独立的坐标轴对象,分别对应左右两个子图- 调用
stats.probplot时,将plot参数指定为对应的子图坐标轴,就能让每个QQ图绘制在独立区域 - 通过
ax.set_title()给每个子图单独设置标题,fig.suptitle()设置整体标题,提升可读性 plt.tight_layout()会自动调整子图的间距和边距,避免标题、坐标轴标签等元素重叠
内容的提问来源于stack exchange,提问作者gregV
相关产品推荐
相关产品推荐

