【问题标题】:Saving what I see in PyPlot保存我在 PyPlot 中看到的内容
【发布时间】:2026-02-05 23:15:01
【问题描述】:

似乎我无法理解我应该在 Python MatplotLib 中做什么才能或多或少准确地保存我在屏幕上看到的内容。

这是我准备的测试代码:

import matplotlib.pyplot as plt
import numpy as np

def main():
    values = [712, 806, 858, 990, 1158, 1126, 166]
    xlabels = np.arange(2013, 2020)
    ylabels = ylabels = np.arange(400,1300,400)
    index = np.arange(len(xlabels))

    fig = plt.figure(1, figsize=(12,16), dpi=100)
    plt.bar(index, values, color='grey')
    plt.xticks(index, xlabels, fontsize=30)
    plt.yticks(ylabels, ylabels, fontsize=30)
    plt.ylim((0, 1400))
    plt.title('Title', fontsize=40)

    plt.savefig('../figs/test.png')
    plt.show()

# -----------------------------------------
if __name__ == "__main__":
    main()

这是我在屏幕上看到的,我使用 GUI 保存的:

这是savefig保存的图片:

如果我使用fig.savefig(...) 代替plt.savefig(...),则没有任何变化。

我做错了什么?

【问题讨论】:

  • 你试过fig.savefig() 吗?
  • 现在完成。没什么变化,我会更新问题。
  • 尝试使用figsize=(7,5)figsize=(8,6)之类的东西,而不是figsize=(12,16)
  • 如下所述,您的显示器不是 16 英寸高,因此 GUI 使图形更短。 Savefig 没有这样的限制。如上所述,如果您希望它看起来与保存的图相同,请将您的图缩小以适合屏幕。

标签: python matplotlib


【解决方案1】:

假设您的显示器在垂直方向上的分辨率为 1080 像素。也许您有一个任务栏,并且 matplotlib 图形窗口也有一个标题和导航栏。因此,您总共可能有大约 950 像素可用于显示您的身材。这意味着以英寸为单位的图形高度不应大于950 / dpi。你的情况

fig = plt.figure(figsize=(12, 950./100), dpi=100)

反之,如果您真的想显示和保存一个 16 英寸的 100 dpi 图形,则需要在图形窗口中添加一个滚动条,类似于 Scrollbar on Matplotlib showing page

【讨论】:

    【解决方案2】:

    您是否尝试过像这样调整大小:

    如果您已经创建了图形,您可以快速执行此操作:

    fig.set_size_inches(12,16)
    fig.savefig('../figs/test.png', dpi=100)
    

    要将大小更改传播到现有的 gui 窗口,请添加 forward=True

    fig.set_size_inches(12,16, forward=True)
    

    来自这个主题: How do you change the size of figures drawn with matplotlib?

    【讨论】: