Matplotlib-如何使用不同功能编辑同一图?

时间:2018-08-06 15:51:22

标签: python-2.7 matplotlib

我试图通过调用不同的函数来绘制一个复杂的图形。我在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

2 个答案:

答案 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()

提供输出: enter image description here

我认为这会有所帮助。

答案 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