在python中使用stackplot时如何反转图例的顺序?

时间:2017-08-20 15:37:37

标签: python matplotlib plot

我有一个使用python的stackplot,并希望右边的图例显示正确的颜色顺序 - 即我需要反转它。但是,当您反转它时,它也会反转颜色,这意味着图中的颜色不再与图例中的颜色相对应。

我的代码如下;

import matplotlib.colors as colors
import matplotlib.cm as mplcm
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset


    # ZOOM PLOT START AND END
    start = 408
    end = 518

    NUM_COLORS = 10

    cm = plt.get_cmap('gist_ncar')
    cNorm  = colors.Normalize(vmin=0, vmax=NUM_COLORS-1)
    scalarMap = mplcm.ScalarMappable(norm=cNorm, cmap=cm)
    fig = plt.figure()

    ax = fig.add_subplot(111)
    # old way:
    ax.set_prop_cycle(color=[cm(1.*i/NUM_COLORS) for i in range(NUM_COLORS)])

    # new way:
    #    ax.set_prop_cycle([scalarMap.to_rgba(i) for i in range(NUM_COLORS)])
    ax.stackplot(range(0, 672), gen_type_summary[0,range1:range2], baseline="zero", linewidth=0.1)    
    ax.stackplot(range(0 , 672),  gen_type_summary[1:12,range1:range2], baseline="zero", linewidth=0.1)

    plt.axis([0,672, -5000,95000])
    plt.legend(gen_label[0:11], loc='center left', bbox_to_anchor=(1, 0.5))
    plt.xlabel('Hours')
    plt.ylabel('Dispatch Level (MW)')
    fig.dpi = 1600
    fig.set_size_inches(w=16,h=5)

不幸的是,stackoverflow图像上传器并不是为了展示图像。任何帮助非常感谢!

1 个答案:

答案 0 :(得分:0)

不幸的是,我没有运行和处理代码所需的数据集。我需要" gen_type_summary"和" gen_type_summary&#34 ;. 但是,我可以建议你存储图例处理和标签,反转它们并在图例中手动指定它们。 像这样的东西

handles, labels = ax.get_legend_handles_labels()   #get the handles
ax.legend(reversed(handles), reversed(labels))

在你的情况下,这将是相当简单的

plt.legend(reversed(gen_label[0:11]), loc='center left', bbox_to_anchor=(1, 0.5))