我刚开始在Data Camp上使用python学习数据科学,我在使用matplotlib.pyplot中的函数时发现了一些东西
import matplotlib.pyplot as plt
year = [1500, 1600, 1700, 1800, 1900, 2000]
pop = [458, 580, 682, 1000, 1650, 6,127]
plt.plot(year, pop)
plt.show() # Here a window opens up and shows the figure for the first time
但是当我试图再次显示它时它不会......
plt.show() # for the second time.. nothing happens
我必须重新输入show()
上方的一行才能再显示一个数字
这是正常的还是问题?
注意:我正在使用REPL
答案 0 :(得分:4)
是的,这是matplotlib图形的正常预期行为。
运行plt.plot(...)
时,您一方面创建了实际图的lines
实例:
>>> print( plt.plot(year, pop) )
[<matplotlib.lines.Line2D object at 0x000000000D8FDB00>]
...另一方面,还有一个Figure
实例,它被设置为“当前图形”,可以通过plt.gcf()
访问(“获取当前图形”的缩写):
>>> print( plt.gcf() )
Figure(432x288)
线(以及您可能添加的其他绘图元素)都放置在当前图形中。调用plt.show()
时,当前图形显示为,然后清空(!),这就是为什么第二次调用plt.show()
不会显示任何内容的原因。
解决此问题的一种方法是显式保留当前的Figure
实例,然后直接通过fig.show()
显示它,如下所示:
plt.plot(year, pop)
fig = plt.gcf() # Grabs the current figure
plt.show() # Shows plot
plt.show() # Does nothing
fig.show() # Shows plot again
fig.show() # Shows plot again...
一种更常用的替代方法是,在执行任何绘图命令之前,首先在开始时显式初始化当前图形。
fig = plt.figure() # Initializes current figure
plt.plot(year, pop) # Adds to current figure
plt.show() # Shows plot
fig.show() # Shows plot again
这通常与图中其他一些参数的说明结合在一起,例如:
fig = plt.figure(figsize=(8,8))
fig.show()
方法可能无法在Jupyter Notebook的上下文中使用,而是可能产生以下警告并且不显示图:
C:\ redacted \ path \ lib \ site-packages \ matplotlib \ figure.py:459: UserWarning:matplotlib当前正在使用非GUI后端,因此 无法显示数字
幸运的是,只需在代码单元末尾(而不是fig
处写fig.show()
),便会将图形推到该单元的输出并以任何方式显示它。如果需要在同一代码单元中多次显示它,则可以使用display
函数来达到相同的效果:
fig = plt.figure() # Initializes current figure
plt.plot(year, pop) # Adds to current figure
plt.show() # Shows plot
plt.show() # Does nothing
from IPython.display import display
display(fig) # Shows plot again
display(fig) # Shows plot again...
要多次show
的一个原因是每次都要进行各种不同的修改。可以使用上面讨论的fig
方法来完成此操作,但是对于更广泛的图形定义,将基本图形包装到函数中并重复调用通常会更容易。
示例:
def my_plot(year, pop):
plt.plot(year, pop)
plt.xlabel("year")
plt.ylabel("population")
my_plot(year, pop)
plt.show() # Shows plot
my_plot(year, pop)
plt.show() # Shows plot again
my_plot(year, pop)
plt.title("demographics plot")
plt.show() # Shows plot again, this time with title
答案 1 :(得分:0)
使用命令:
%matplotlib
ipython3中的
帮我使用带有绘图的单独窗口
答案 2 :(得分:0)