You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python动态将多张图表保存到同一个文件中?

把多张Seaborn图表批量保存到同一文件的解决方案

核心实现思路

利用Matplotlib的子图(subplot)系统创建多子图画布,在每个子图上绘制对应图表,最后一次性保存整个画布,既避免文件覆盖问题,也能轻松扩展到任意数量的图表。

通用批量实现代码

方案1:参数驱动的批量生成(通用化程度最高)

先定义所有图表的参数集合,再通过循环批量绘制,可随时添加新的图表参数:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 定义批量生成的参数列表,可无限扩展
plot_params = [
    {"mean": 0, "std": 1, "n_samples": 100, "title": "Gaussian noise 1"},
    {"mean": 0, "std": 2, "n_samples": 200, "title": "Gaussian noise 2"},
    # 可继续添加更多图表参数
    # {"mean": 1, "std": 1.5, "n_samples": 150, "title": "Gaussian noise 3"},
]

# 计算子图布局:这里用一行多列,也可改为多行多列(比如rows = len(plot_params)//2 +1, cols=2)
n_plots = len(plot_params)
fig, axes = plt.subplots(nrows=1, ncols=n_plots, figsize=(5*n_plots, 4))  # 按图表数量自动调整画布大小

# 循环绘制每个子图
for idx, params in enumerate(plot_params):
    # 处理单图表的特殊情况
    ax = axes[idx] if n_plots > 1 else axes
    # 绘制分布图表
    sns.distplot(
        np.random.normal(params["mean"], params["std"], params["n_samples"]),
        hist=True, kde=True,
        bins=int(80/5), color='darkblue',
        hist_kws={'edgecolor':'black'},
        kde_kws={'linewidth': 2},
        ax=ax  # 指定绘制到当前子图
    )
    ax.set_title(params["title"])

# 自动调整子图间距,避免元素重叠
plt.tight_layout()
# 保存整个画布到单个文件
plt.savefig('Multiple_Gaussian_Noises.png', dpi=100)
plt.close()  # 关闭画布释放内存

方案2:针对现有代码的快速修改(适合固定少量图表)

如果只是对现有两个图表做合并,直接创建固定数量的子图即可:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 创建1行2列的子图画布
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))

# 绘制第一张图到指定子图
sns.distplot(
    np.random.normal(0,1,100), hist=True, kde=True,
    bins=int(80/5), color='darkblue',
    hist_kws={'edgecolor':'black'},
    kde_kws={'linewidth': 2},
    ax=ax1
)
ax1.set_title('Gaussian noise 1')

# 绘制第二张图到指定子图
sns.distplot(
    np.random.normal(0,2,200), hist=True, kde=True,
    bins=int(80/5), color='darkblue',
    hist_kws={'edgecolor':'black'},
    kde_kws={'linewidth': 2},
    ax=ax2
)
ax2.set_title('Gaussian noise 2')

# 调整布局并保存
plt.tight_layout()
plt.savefig('Gaussian_Noises_Combined.png')
plt.close()

额外注意

  • 若使用Seaborn v0.11+版本,distplot已被标记为废弃,推荐用histplot替代,替换后的绘制代码示例:
    sns.histplot(
        np.random.normal(params["mean"], params["std"], params["n_samples"]),
        kde=True, bins=int(80/5), color='darkblue',
        edgecolor='black', linewidth=2,
        ax=ax
    )
    
  • 画布大小可通过figsize参数灵活调整,保证图表显示清晰;plt.tight_layout()建议必加,避免标题、坐标轴标签重叠。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:37:27