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

如何使用Matplotlib将图表保存为指定尺寸?(普通图与子图场景的问题求助)

如何使用Matplotlib将图表保存为指定尺寸?(普通图与子图场景的问题求助)

我来帮你梳理一下问题的根源,然后给出对应的修复方案:

一、普通单图场景的问题修复

你最初的代码出现空白保存的核心原因是操作顺序完全颠倒了:

  1. 你先调用plt.xlabel、plt.ylabel,这些操作是作用在Matplotlib默认创建的空白figure上的
  2. 之后你才调用plt.figure(figsize=(8, 6)),这会新建一个完全空白的、指定尺寸的figure
  3. 最后保存的是这个新建的空白figure,自然没有内容

正确的操作顺序应该是先创建指定尺寸的figure,再执行所有绘图相关操作:

# 1. 先创建指定尺寸的figure
plt.figure(figsize=(8, 6))
# 2. 执行绘图操作(这里需要补充你的plot代码,比如plt.plot(x, y))
plt.plot(x, y)  # 替换为你的实际数据
# 3. 设置标签
plt.xlabel('2θ-ω (°)')
plt.ylabel('Log intensity')
# 4. 最后保存
plt.savefig('new_graph.svg', format='svg')

二、子图场景的问题修复

你后来的子图代码错误在于重复创建了figure/axes对象:

  1. 第一次fig, ax = plt.subplots()创建了一个默认尺寸的figure和对应的axes,你在这个ax上绘图、设置标签,得到了正确的图
  2. 之后你又调用ax = plt.subplots(figsize=(8, 6)),这行代码会新建一个指定尺寸的空白figure和axes,而且错误地把返回的元组赋值给了之前的ax变量
  3. 最后保存的是这个新建的空白figure,所以得到了无数据的svg

正确的做法是在第一次创建子图时就指定figsize,全程使用同一个fig和ax对象:

# 一步到位:创建指定尺寸的figure和对应的axes
fig, ax = plt.subplots(figsize=(8, 6))
# 在这个ax上绘制数据
ax.plot(x1, z1, label="one of my lines", color='thistle')
# 设置坐标轴标签
ax.set_xlabel('2θ-ω (°)')
ax.set_ylabel('Log intensity')
# 如果需要显示图例
ax.legend()
# 保存这个包含数据的指定尺寸figure
plt.savefig('new_graph.svg', format='svg')

关键注意事项

  • 所有绘图操作(绘图、设置标签、添加图例等)必须作用在同一个figure/axes对象上
  • 一定要先创建指定尺寸的figure,再做后续操作,避免Matplotlib自动创建默认尺寸的figure
  • 不要重复调用plt.figure()或plt.subplots(),否则会生成多个独立的figure,容易保存到错误的空白图

备注:内容来源于stack exchange,提问作者Kray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:08:07