将多个axvspan标签设置为图例中的一个元素

时间:2017-06-19 14:12:17

标签: python-3.x matplotlib

我正在尝试设置一系列垂直轴跨度,以在不同时间表示不同的切换位置。例如,在下图中,切换位置1(绿色)发生了很多次,在其他位置之间交替。

Switching positions symbolized by axvspan plots

我绘制了这些跨度在元组列表中运行for循环,每个元组包含每个区间的初始和最终索引以绘制axvspan。

def plotShades(timestamp, intervals, colour):
    for i in range(len(intervals)):
        md.plt.axvspan(timestamp[intervals[i][0]], timestamp[intervals[i][1]], alpha=0.5, color=colour, label="interval")

然后调用另一个函数,绘制每个不同切换位置的阴影:

def plotAllOutcomes(timestamp, switches):
    #switches is a list of 7 arrays indicating when the switcher is at each one of the 7 positions. If the array has a 1 value, the switcher is there. 0 otherwise.

    colors = ['#d73027', '#fc8d59', '#fee08b', '#ffffbf', '#d9ef8b', '#91cf60', '#1a9850']     
    intervals = []        

    for i in range(len(switches)):
        intervals.append(getIntervals(switches[i], timestamp))
        plotShades(timestamp, intervals[i], colors[i])    
        md.plt.legend()

使用我放在这里的代码片段(不是最好的代码,我知道 - 我在Python中相当新!)传说最终每个间隔都有一个项目,这非常糟糕。这是它的外观:

我想获得一个只有7个项目的传奇,每个项目在我的axvspans情节中都是单一颜色。我该怎么办呢?我进行了相当广泛的搜索,但是之前没有设法找到这种情况。提前感谢您的帮助!!

1 个答案:

答案 0 :(得分:4)

您可以使用以"_"开头的标签忽略的一个小技巧:

plt.axvspan( ... , label =  "_"*i + "interval")

因此,仅为i==0的情况创建标签。