Arx*_*ede 5 python matplotlib ipython jupyter-notebook
因此,我将以下简单代码保存在 .py 文件中,并在 shell 中执行:
import matplotlib.pyplot as plt
myfig = plt.figure(figsize=(5, 5))
ax1 = myfig.add_subplot(1, 1, 1)
myfig.show()
Run Code Online (Sandbox Code Playgroud)
但是它在执行时什么都不做,没有错误。
然后,当我在 shell 中启动 Ipython 并键入完全相同的代码时,它确实会弹出一个空窗口。这是为什么?
当然我可以使用 plt.show() 一切都很好。但是假设我有两个图形,fig1 和 fig2,并且两个图形中都有东西,而我只想显示其中一个,我该怎么做?plt.show() 绘制它们。
对不起,如果这是愚蠢的我只是好奇为什么在 ipython 中交互工作时,窗口会在调用 fig1.show() 时弹出,但是当我在 shell 中执行相同的脚本但执行以下操作时没有任何反应:python myfile.py
谢谢!
plt.show启动事件循环,创建交互式窗口并显示其中的所有当前图形。如果您的图形数量多于当前 pyplot 状态中实际想要显示的图形数量,您可以在调用 之前关闭所有不需要的图形plt.show()。
fig1 = plt.figure()
ax1 = fig1.add_subplot(1, 1, 1)
ax1.plot([1,3,4])
fig2 = plt.figure()
ax2 = fig2.add_subplot(1, 1, 1)
ax2.plot([1,2,5])
# close first figure
plt.close(fig1)
# show all active figures (which is now only fig2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
相反fig.show()不会启动事件循环。因此,只有在事件循环已经启动的情况下才有意义,例如在plt.show()调用之后。在非交互模式下,这可能发生在事件循环中的事件上。举个例子,fig2当 Fig1 处于活动状态时,一旦按下键盘上的一个键,就会显示以下内容。
import matplotlib.pyplot as plt
fig1 = plt.figure()
ax1 = fig1.add_subplot(1, 1, 1)
ax1.plot([1,3,4])
def show_new_figure(evt=None):
fig2 = plt.figure()
ax2 = fig2.add_subplot(1, 1, 1)
ax2.plot([1,2,5])
fig2.show()
# Upon pressing any key in fig1, show fig2.
fig1.canvas.mpl_connect("key_press_event", show_new_figure)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4134 次 |
| 最近记录: |