matplotlib 在ipython中调用pylab.savefig而不显示

deyfvvtc  于 2023-05-18  发布在  Python
关注(0)|答案(3)|浏览(125)

我需要在一个文件中创建一个图,但不需要在IPython notebook中显示它。我不清楚IPythonmatplotlib.pylab在这方面的相互作用。但是,当我调用pylab.savefig("test.png")时,除了保存在test.png中之外,还显示了当前的图形。自动创建大量打印文件时,通常不希望这样做。或者在期望由另一应用进行外部处理的中间文件的情况下。
不确定这是matplotlib还是IPython笔记本问题。

omjgkv6w

omjgkv6w1#

这是一个matplotlib问题,您可以通过使用不显示给用户的后端来解决这个问题,例如:“攻击”:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

plt.plot([1,2,3])
plt.savefig('/tmp/test.png')

**编辑:**如果不想失去显示图的功能,请关闭交互模式,并仅在准备好显示图时调用plt.show()

import matplotlib.pyplot as plt

# Turn interactive plotting off
plt.ioff()

# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('/tmp/test0.png')
plt.close(fig)

# Create a new figure, plot into it, then don't close it so it does get displayed
plt.figure()
plt.plot([1,3,2])
plt.savefig('/tmp/test1.png')

# Display all "open" (non-closed) figures
plt.show()
af7jpaap

af7jpaap2#

我们不需要plt.ioff()plt.show()(如果我们使用%matplotlib inline)。你可以在没有plt.ioff()的情况下测试上面的代码。plt.close()具有重要作用。试试这个:

%matplotlib inline
import pylab as plt

# It doesn't matter you add line below. You can even replace it by 'plt.ion()', but you will see no changes.
## plt.ioff()

# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('test0.png')
plt.close(fig)

# Create a new figure, plot into it, then don't close it so it does get displayed
fig2 = plt.figure()
plt.plot([1,3,2])
plt.savefig('test1.png')

如果你在iPython中运行这段代码,它将显示第二个图,如果你在它的末尾添加plt.close(fig2),你将什么也看不到。

**综上所述,**如果以plt.close(fig)关闭图形,则不会显示该图形。

g6baxovj

g6baxovj3#

只需将plt.close()而不是plt.show()

xs = [1,2,3]
ys = [1,4,9]
plt.plot(xs, ys)
# plt.show() # will show the plot
plt.close() # will close the plot

相关问题