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

问题描述 投票:8回答:3

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

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

我很感激你的帮助。

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

戴夫(英国)

python matplotlib window resolution figure
3个回答
0
投票

试试这个:

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

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

0
投票

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.