我试图通过调用不同的函数来绘制一个复杂的图形。我在ipython笔记本内部工作。
为示例起见,首先说我想创建一个图,并调用一个执行散点图的函数。
import numpy as np
import matplotlib.pyplot as plt
def background():
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(np.random.rand(10), np.random.rand(10))
return fig, ax
fig, ax = background()
然后,我想在散点图上覆盖下一层。我的理解是,我应该重用刚从background()
返回的轴。我目前想做的是
# Eventually, I would put the next lines inside a function
ax.plot(np.random.rand(10), np.random.rand(10), '-')
# next I want to show the updated figure
fig.canvas.draw_idle() # doesn't work
plt.show() # doesn't work
显示更新的图的正确方法是什么?
我正在使用ipython笔记本3.2.1版,matplotlib 2.02版,以防万一有人涉水,我确实在开始之前打电话给%matplotlib inline
。
答案 0 :(得分:0)
您可以执行以下操作:
import numpy as np
import matplotlib.pyplot as plt
def background(**kwargs):
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(np.random.rand(10), np.random.rand(10))
return fig, ax
#Now let's call the background function with params to plot.
fig,ax = background()
ax.plot(np.random.rand(10), np.random.rand(10), '-')
fig.canvas.draw_idle()
plt.show()
我认为这会有所帮助。
答案 1 :(得分:0)
好的,这很尴尬。正如@ImportanceOfBeingEarnest所正确指出的,如果在不同的单元格中调用代码,只需在单元格中调用fig
就会显示更新的图形。
如果我已经按照自己的方式(使用ax
更新绘图)在同一个笔记本单元中测试了代码,那将奏效。供参考,整个过程看起来像
import numpy as np
import matplotlib.pyplot as plt
def background():
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(np.random.rand(10), np.random.rand(10))
return fig, ax
def foreground(ax):
ax.plot(np.random.rand(10), np.random.rand(10))
# Calling both functions
fig, ax = background()
foreground(ax)
# because I'm working in the notebook no need to call anything else