我正在使用带有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)
然而,这不是我正在寻找的解决方案;因为我希望能够使用“图”窗口的动态平移和缩放功能修改绘图,然后以高于默认屏幕分辨率的分辨率保存。
我很感激你的帮助。
非常感谢期待&新年快乐。
戴夫 (UK)
答案 0 :(得分:0)
试试这个:
确定如何使用像素到英寸转换器设置width
和height
,例如following matplotlib documentation。然后尝试:
import matplotlib.pyplot as plt
fig = plt.figure(frameon=False)
fig.set_size_inches(width,height)
答案 1 :(得分:0)
可以在按键时注册一个事件,该事件可以保存具有一些先前给定大小和dpi的数字。以下使用存储一些figsize
和dpi
的类,并在按 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()
答案 2 :(得分:0)
我在spyder中遇到此问题,并且发现当我从内置窗口查看应用程序中保存图形时,更改Preferences > iPython Console > Inline Backend > Resolution
中的值会更改分辨率。