保存绘图时更改Matplotlib图窗口的分辨率?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存绘图时更改Matplotlib图窗口的分辨率?相关的知识,希望对你有一定的参考价值。

我正在使用带有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)

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

我很感激你的帮助。

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

戴夫(英国)

答案

试试这个:

确定如何使用像素到英寸转换器设置widthheight,就像在following matplotlib documentation中一样。然后尝试:

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

可以在按键上注册事件,该事件将使用一些先前给定的大小和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()
另一答案

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

以上是关于保存绘图时更改Matplotlib图窗口的分辨率?的主要内容,如果未能解决你的问题,请参考以下文章

窗口大小更改导致我的条形图覆盖 - Matplotlib

在 pyqt5 gui 中显示 matplotlib 动画图并同时保存在 mp4 中的问题

保存由函数 matplotlib python 产生的绘图

matplotlib:子图绘制

如何在我的 GUI 上绘图

在 matplotlib 中增加 gif 分辨率