如何在2*2子图网格中循环绘制stats.probplot正态概率图
问题修复说明
错误原因
- 调用
stats.probplot时,plot参数传入plt会默认绘制到全局当前活跃的子图上,多次调用会重复覆盖同一块绘图区域,最终仅显示最后生成的图 - 将
stats.probplot的返回值(元组类型,存储正态拟合的计算结果,并非子图对象)重新赋值给了原本的子图变量ax,导致原有子图对象被覆盖,无法对子图做后续样式调整
修正后代码
import random import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt fig, axs = plt.subplots(2,2, figsize=(15, 6), facecolor='w', edgecolor='k') fig.subplots_adjust(hspace = .5, wspace=.2) # 调整wspace避免坐标轴标签重叠 data = {'col1': [random.randrange(1, 50, 1) for i in range(1000)], 'col2': [random.randrange(1, 50, 1) for i in range(1000)], 'col3':[random.randrange(1, 50, 1) for i in range(1000)], 'col4':[random.randrange(1, 50, 1) for i in range(1000)]} df = pd.DataFrame(data) for ax, col_name in zip(axs.ravel(), df.columns): # 直接将当前循环对应的子图对象传给plot参数即可 stats.probplot(df[col_name], plot=ax) ax.set_title(f"概率图:{col_name}") plt.show()
补充说明
stats.probplot传入plot=ax时,会自动将概率图绘制到指定子图上,无需额外赋值操作- 可以直接通过循环中的
ax变量自定义子图的标题、坐标轴标签、刻度等样式
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

