自动保存图形,Python,Matplotlib

3

我希望在绘制完成后保存我的图形。我尝试过类似以下的方法:

import matplotlib.pyplot as plt
import os

plt.ion()
x = []
y = []
home = os.sep.join((os.path.expanduser('~'), 'Desktop'))
home1 = home + '\nowy'

for i in range(0,20):
    x.append(i)
    y.append(i+2)

    plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
    plt.axis(xmin = 0,xmax = 200,ymin=0,ymax=200)
    plt.show()
    plt.pause(0.1)
plt.pause(5)
plt.savefig(os.sep.join(home1 + '1'),format = 'png') 

但是它无法正常工作。出现了一个错误:
[Errno 22] invalid mode ('wb') or filename: 'C\\:\\\\\\U\\s\\e\\r\\s\\\\\\M\\i\\c\\h\\a\\l\\\\\\D\\e\\s\\k\\t\\o\\p\\\n\\o\\w\\y\\p\\l\\o\\t\\1.png'

有人能告诉我如何将这个图保存到“home1”目录中吗?我已经寻找解决方案一段时间了,但什么都没用。

2个回答

4
尝试使用os.path.join进行操作:
plt.savefig(os.path.join(os.path.expanduser('~'), 'Desktop', 'nowy1.png')) 

你也可以使用os.sep.join,这可以使你的代码更加兼容。它可以看起来像这样:

plt.savefig(os.sep.join([os.path.expanduser('~'), 'Desktop', 'nowy1.png']))

非常感谢您 :) - Maq92
@Maq92:你的代码中有几个 plt.pause 调用,请尝试在保存当前图形之前删除最后一个。 - j-i-l
不,最后的暂停必须存在。我说的是在“更新”图形之前的这段时间(获取新点并绘制它)。我将用它来绘制一些巨大的图形,不想等待几个小时 :) 有没有什么方法可以加速它? - Maq92
@Maq92,当您添加新数据时,每一步都需要绘制当前图形吗?根据您想要显示的数据大小,plt.draw需要一些时间,而且据我所知,您几乎无法加快它的速度。但是对于您在此处提供的示例代码,您需要等待的时间实际上应该由plt.pause调用来确定。 - j-i-l
这将是一个根据从外部设备接收到的数据绘制(并实时更新)图形的程序。嗯,好的,谢谢帮忙 :) - Maq92
@Maq92 这可能对你计划做的事情有帮助:https://dev59.com/nGgu5IYBdhLWcg3w9ruX - j-i-l

4

如果你要自动运行这个程序,最好使用OO接口而不是状态机接口:

import matplotlib.pyplot as plt
import os

plt.ion()
x = []
y = []
home = os.path.join(os.path.expanduser('~'), 'Desktop')
home1 = os.path.join(home, 'nowy')

# create the figure and axes
fig, ax = plt.subplots(1, 1)
ax.set_xlim(0, 200)
ax.set_ylim(0, 200)

# create the line2D artist
ln, = ax.plot(x, y, 'g-', linewidth=1.5, markersize=4)
# do the looping
for i in range(0,20):
    # add to the data lists
    x.append(i)
    y.append(i+2)
    # update the data in the line2D object
    ln.set_xdata(x)
    ln.set_ydata(y)
    # force the figure to re-draw
    fig.canvas.draw()
    # pause, let the gui re-draw it's self
    plt.pause(0.1)
# pause again?
plt.pause(5)
# save the figure
fig.savefig(os.path.join(home1,  '1'),format='png') 

[由于在 RC3 中发现了一个无关的错误,未经测试]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接