【问题标题】:Change resolution of Matplotlib Figure window when saving plot?保存绘图时更改 Matplotlib 图窗口的分辨率?
【发布时间】:2014-01-19 01:18:54
【问题描述】:

我正在使用带有 Canopy 和 Anaconda 包管理器/编辑器的 Windows XP v3/Python 2.7。

我正在使用 Python/Matplotlib 生成一些 Bland-Altman 图(统计散点图)以供发布。

处理数据后,plt.show() 命令会打开一个包含绘图的新“图形”窗口,看起来不错。

我希望能够在此窗口中使用动态平移和缩放命令以交互方式优化绘图的外观,然后将其保存为高分辨率的印刷质量 png 图像(400-600 dpi,7 x 5 英寸)。

从“图形”窗口保存图像的默认设置似乎设置为屏幕分辨率(800 x 600 像素),我在此窗口中找不到任何允许我更改这些设置的选项。

我已经阅读了这个论坛上的其他帖子,其中解释了如何通过使用以下命令来操作 dpi 和图像大小,以更高分辨率直接从 Python 保存绘图,例如:

plt.figure(figsize=(18, 12), dpi=400)
plt.savefig("myplot.png", dpi = 400)

但是,这不是我正在寻找的解决方案;因为我希望能够使用“图形”窗口的动态平移和缩放功能修改绘图,然后以比默认屏幕分辨率更高的分辨率保存。

感谢您的帮助。

非常感谢您的期待和新年快乐。

戴夫 (英国)

【问题讨论】:

  • 我使用 Spyder,可以毫无问题地操作窗口、平移、缩放和保存。你的视窗应用是什么?
  • 嗨 Myles - 我正在通过 Anaconda 运行 Spyder。我还可以平移、缩放和保存;但只能以默认分辨率(800 x 600 像素)保存,并且无法找到将其更改为更高分辨率的方法。
  • 这可能有点傻,但是你有没有尝试过抓图窗口的一角?

标签: python matplotlib window resolution figure


【解决方案1】:

试试这个:

确定如何使用像素到英寸转换器设置widthheight,例如following matplotlib documentation。然后试试:

import matplotlib.pyplot as plt
fig = plt.figure(frameon=False)
fig.set_size_inches(width,height)

【讨论】:

  • 恐怕不适合我:最终还是会得到一个 800 x 600 分辨率的 ~40 Kb png 文件。尝试将上述命令放在我的例程中的不同位置,包括在开始和结束时:似乎没有任何区别。将不胜感激任何其他建议。
【解决方案2】:

人们可能会在按键时注册一个事件,该事件将使用先前给定的大小和 dpi 保存图形。下面使用一个存储一些figsizedpi 的类,按下 t 将更改图形的大小和 dpi。然后它将保存此图形并恢复旧的尺寸和 dpi,以使屏幕上的图形保持不变。

import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt

fig,ax=plt.subplots()
ax.plot([1,3,1])

class AnySizeSaver():
    def __init__(self, fig=None, figsize=None, dpi=None, filename=None):
        if not fig: fig=plt.gcf()
        self.fig = fig
        if not figsize: figsize=self.fig.get_size_inches()
        self.figsize=figsize
        if not dpi: dpi=self.fig.dpi
        self.dpi=dpi
        if not filename: filename="myplot.png"
        self.filename=filename
        self.cid = self.fig.canvas.mpl_connect("key_press_event", self.key_press)

    def key_press(self, event):
        if event.key == "t":
            self.save()

    def save(self):
        oldfigsize = self.fig.get_size_inches()
        olddpi=self.fig.dpi
        self.fig.set_size_inches(self.figsize)
        self.fig.set_dpi(self.dpi)
        self.fig.savefig(self.filename, dpi=self.dpi)
        self.fig.set_size_inches(oldfigsize, forward=True)
        self.fig.set_dpi(olddpi)
        self.fig.canvas.draw_idle()
        print(fig.get_size_inches())

ass = AnySizeSaver(fig=fig, figsize=(3,3), dpi=600)

plt.show()

【讨论】:

    【解决方案3】:

    我在 spyder 中遇到了这个问题,当我从内置的窗口查看应用程序中保存图形时,发现更改 Preferences > iPython Console > Inline Backend > Resolution 中的值会改变分辨率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-19
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多