如何提取scatter_matrix散点矩阵图的第一列子图并单独绘制?
仅保留散点矩阵图的第一列子图

我通过以下代码绘制了该散点矩阵图:
import matplotlib.pyplot as plt from pandas.plotting import scatter_matrix # selecting three numerical features features = ['TARGET_deathRate','incidenceRate', 'PctPublicCoverageAlone', 'povertyPercent', 'PctHS25_Over', 'PctPublicCoverage'] # plotting the scatter matrix # with the features plt.rcParams['font.size'] = '5' scatter_matrix(df_add[features]) #plt.subplot(2, 2, 2) plt.show()
我希望仅绘制该矩阵图中的第一列子图,移除其余5列,请问该如何实现?
解决方案
方法1:基于原scatter_matrix隐藏多余子图
scatter_matrix会返回一个二维的Axes对象数组,我们可以遍历这个数组,只保留第一列的子图,将其余列的子图设置为不可见:
import matplotlib.pyplot as plt from pandas.plotting import scatter_matrix features = ['TARGET_deathRate','incidenceRate', 'PctPublicCoverageAlone', 'povertyPercent', 'PctHS25_Over', 'PctPublicCoverage'] plt.rcParams['font.size'] = '5' # 获取所有子图的Axes对象 axes = scatter_matrix(df_add[features]) # 遍历每一行,隐藏第一列以外的所有子图 for row in axes: for ax in row[1:]: ax.set_visible(False) plt.tight_layout() # 调整布局避免重叠 plt.show()
方法2:手动绘制第一列内容(更轻量化)
如果不想生成全矩阵再隐藏,也可以直接手动绘制第一列的直方图和散点图,这种方式更高效:
import matplotlib.pyplot as plt features = ['TARGET_deathRate','incidenceRate', 'PctPublicCoverageAlone', 'povertyPercent', 'PctHS25_Over', 'PctPublicCoverage'] # 创建对应行数的画布,列数固定为1 fig, axes = plt.subplots(nrows=len(features), ncols=1, figsize=(4, 12)) plt.rcParams['font.size'] = '5' # 第一行绘制第一个特征的直方图 df_add[features[0]].plot(kind='hist', ax=axes[0], edgecolor='black') axes[0].set_title(features[0]) # 后续行绘制其他特征与第一个特征的散点图 for i in range(1, len(features)): axes[i].scatter(df_add[features[0]], df_add[features[i]], s=5) axes[i].set_xlabel(features[0]) axes[i].set_ylabel(features[i]) plt.tight_layout() plt.show()
两种方法都能实现只保留第一列子图的需求,方法1适合快速修改原有代码,方法2则更灵活,适合仅需要第一列内容的场景。
内容的提问来源于stack exchange,提问作者Swalkr
相关产品推荐
相关产品推荐

