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

2024-05-19 06:22:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在处理数据之后,plt.show()命令打开一个新的“Figure”窗口,其中包含绘图,看起来很好。

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

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

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

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

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

我很感激你的帮助。

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

戴夫 (英国)


Tags: 图像命令图形绘图屏幕pngwindows分辨率
3条回答

试试这个:

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

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

一个人可以在按键时注册一个事件,该事件将以先前给定的大小和dpi保存图形。下面使用一个存储一些figsizedpi的类,在按下twll时,将更改图形的大小和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中更改值会在保存内置窗口查看应用程序中的图形时更改分辨率。

相关问题 更多 >

    热门问题