How do I tell Matplotlib to create a second (new) plot, then later plot on the old one?

前端 未结 4 1917
执念已碎
执念已碎 2020-11-30 17:03

I want to plot data, then create a new figure and plot data2, and finally come back to the original plot and plot data3, kinda like this:

import numpy as np
         


        
相关标签:
4条回答
  • 2020-11-30 17:28

    If you find yourself doing things like this regularly it may be worth investigating the object-oriented interface to matplotlib. In your case:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.arange(5)
    y = np.exp(x)
    fig1, ax1 = plt.subplots()
    ax1.plot(x, y)
    ax1.set_title("Axis 1 title")
    ax1.set_xlabel("X-label for axis 1")
    
    z = np.sin(x)
    fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure
    ax2.plot(x, z)
    ax3.plot(x, -z)
    
    w = np.cos(x)
    ax1.plot(x, w) # can continue plotting on the first axis
    

    It is a little more verbose but it's much clearer and easier to keep track of, especially with several figures each with multiple subplots.

    0 讨论(0)
  • 2020-11-30 17:32

    One way I found after some struggling is creating a function which gets data_plot matrix, file name and order as parameter to create boxplots from the given data in the ordered figure (different orders = different figures) and save it under the given file_name.

    def plotFigure(data_plot,file_name,order):
        fig = plt.figure(order, figsize=(9, 6))
        ax = fig.add_subplot(111)
        bp = ax.boxplot(data_plot)
        fig.savefig(file_name, bbox_inches='tight')
        plt.close()
    
    0 讨论(0)
  • 2020-11-30 17:45

    When you call figure, simply number the plot.

    x = arange(5)
    y = np.exp(5)
    plt.figure(0)
    plt.plot(x, y)
    
    z = np.sin(x)
    plt.figure(1)
    plt.plot(x, z)
    
    w = np.cos(x)
    plt.figure(0) # Here's the part I need
    plt.plot(x, w)
    

    Edit: Note that you can number the plots however you want (here, starting from 0) but if you don't provide figure with a number at all when you create a new one, the automatic numbering will start at 1 ("Matlab Style" according to the docs).

    0 讨论(0)
  • 2020-11-30 17:51

    However, numbering starts at 1, so:

    x = arange(5)
    y = np.exp(5)
    plt.figure(1)
    plt.plot(x, y)
    
    z = np.sin(x)
    plt.figure(2)
    plt.plot(x, z)
    
    w = np.cos(x)
    plt.figure(1) # Here's the part I need, but numbering starts at 1!
    plt.plot(x, w)
    

    Also, if you have multiple axes on a figure, such as subplots, use the axes(h) command where h is the handle of the desired axes object to focus on that axes.

    (don't have comment privileges yet, sorry for new answer!)

    0 讨论(0)
提交回复
热议问题