You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Pandas为DataFrame的35个特征绘制小多图?

如何为35个特征批量绘制小多图(Small Multiple Chart)

嘿,我来帮你搞定批量绘制小多图的问题!35个特征一个个画确实太麻烦,直接用matplotlib的子图网格+遍历就能一次性搞定,给你完整方案和拆解:

完整代码示例

import matplotlib.pyplot as plt
import pandas as pd

# 1. 读入数据集到DataFrame
df = pd.read_csv("mydataset.csv")

# 2. 规划子图布局:35个特征刚好7行5列(也可以换成5行7列,看你偏好)
n_rows = 7
n_cols = 5

# 创建画布和子图网格,调整figsize让每个子图有足够空间
fig, axes = plt.subplots(n_rows, n_cols, figsize=(15, 20))

# 3. 遍历每个特征,在对应子图绘制
for idx, (feature_name, ax) in enumerate(zip(df.columns, axes.flatten())):
    # 在当前子图绘制特征折线图(如果要换直方图,把plot()改成plot(kind='hist')即可)
    df[feature_name].plot(ax=ax, title=f"Feature: {feature_name}")
    # 优化细节:去掉x轴标签避免拥挤,缩小刻度字体
    ax.set_xlabel("")
    ax.tick_params(axis='x', labelsize=8)

# 4. 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()

# 渲染显示图表,或者保存成图片
plt.show()
# plt.savefig("small_multiples.png", dpi=300)  # 按需取消注释保存

关键步骤拆解

  • 读入数据:这一步你已经写对了,pd.read_csv()完美加载数据集到DataFrame。
  • 布局规划:35个特征刚好能分成7×5的网格(刚好35个位置),plt.subplots()会一次性生成所有子图的坐标轴,figsize参数要根据布局调整,保证每个子图不会挤成一团。
  • 遍历绘图axes.flatten()把二维的子图数组转成一维列表,这样就能和df.columns一一对应遍历。每个子图通过ax参数指定绘图位置,加上标题方便区分不同特征。
  • 布局优化plt.tight_layout()是神器,会自动调整子图的间距,避免标题、刻度互相重叠;你还可以根据需求调整刻度字体大小、隐藏不必要的标签,让图表更清爽。
  • 渲染保存plt.show()直接显示图表,也可以用plt.savefig()导出高清图片。

可选优化建议

  • 按需切换图表类型:如果特征是分类数据,把df[feature_name].plot()改成df[feature_name].plot(kind='bar')就能画柱状图;数值型数据也可以用直方图kind='hist'
  • 共享坐标轴:如果特征的数值范围相近,可以在plt.subplots()里加sharex=Truesharey=True,让子图共享坐标轴,减少重复标签,布局更整洁。
  • 调整布局比例:如果觉得7行5列纵向太长,换成5行7列横向布局也是可以的,只要行数×列数≥35就行(多出来的子图可以用ax.remove()删掉)。

内容的提问来源于stack exchange,提问作者docdev

火山引擎 最新活动