Get legend as a separate picture in Matplotlib

后端 未结 9 909
情歌与酒
情歌与酒 2020-11-29 03:50

I\'m developing a Web application and want to display a figure and its legend in different locations on the page. Which means I need to save the legend as a separate png fil

9条回答
  •  鱼传尺愫
    2020-11-29 04:37

    This calculates the size of the legend automatically. If mode == 1, the code is similar to Steve Tjoa's answer, while mode == 2 is similar Andre Holzner's answer.

    The loc parameter must be set to 'center' to make it work (but I do not know why this is necessary).

    mode = 1
    #mode = 2
    
    import pylab
    fig = pylab.figure()
    if mode == 1:
        lines = fig.gca().plot(range(10), pylab.randn(10), range(10), pylab.randn(10))
        legend_fig = pylab.figure(figsize=(3,2))
        legend = legend_fig.legend(lines, ('one', 'two'), 'center')
    if mode == 2:
        fig.gca().plot(range(10), pylab.randn(10), range(10), pylab.randn(10), label='asd')
        legend_fig = pylab.figure()
        legend = pylab.figlegend(*fig.gca().get_legend_handles_labels(), loc = 'center')
    legend.get_frame().set_color('0.70')
    legend_fig.canvas.draw()
    legend_fig.savefig('legend_cropped.png',
        bbox_inches=legend.get_window_extent().transformed(legend_fig.dpi_scale_trans.inverted()))
    legend_fig.savefig('legend_original.png')
    

    Original (uncropped) legend:

    Original (uncropped) legend

    Cropped legend:

    Cropped legend

提交回复
热议问题