How to put the legend out of the plot

后端 未结 17 3564
时光说笑
时光说笑 2020-11-21 04:42

I have a series of 20 plots (not subplots) to be made in a single figure. I want the legend to be outside of the box. At the same time, I do not want to change the axes, a

17条回答
  •  生来不讨喜
    2020-11-21 05:32

    Here's another solution, similar to adding bbox_extra_artists and bbox_inches, where you don't have to have your extra artists in the scope of your savefig call. I came up with this since I generate most of my plot inside functions.

    Instead of adding all your additions to the bounding box when you want to write it out, you can add them ahead of time to the Figure's artists. Using something similar to Franck Dernoncourt's answer above:

    import matplotlib.pyplot as plt
    
    # data 
    all_x = [10,20,30]
    all_y = [[1,3], [1.5,2.9],[3,2]]
    
    # plotting function
    def gen_plot(x, y):
        fig = plt.figure(1)
        ax = fig.add_subplot(111)
        ax.plot(all_x, all_y)
        lgd = ax.legend( [ "Lag " + str(lag) for lag in all_x], loc="center right", bbox_to_anchor=(1.3, 0.5))
        fig.artists.append(lgd) # Here's the change
        ax.set_title("Title")
        ax.set_xlabel("x label")
        ax.set_ylabel("y label")
        return fig
    
    # plotting
    fig = gen_plot(all_x, all_y)
    
    # No need for `bbox_extra_artists`
    fig.savefig("image_output.png", dpi=300, format="png", bbox_inches="tight")
    

    Here's the generated plot.

提交回复
热议问题