Messing标签在matplotlib中的颜色

时间:2016-05-07 04:19:46

标签: python dictionary matplotlib label

我正在绘制一个有三个键的词典中的数据:

[u'Ferronikel', u'Nicromo', u'Alambre_1']

每一个都有几个参数,如电阻,电压等 所以我正在使用一个函数来轻松绘制值。

def graficar_parametro(x,y):

    d_unidades = {'I':'A','V':'V','R':'ohm','T':'C','P':'W/m'}
    for alambre in sorted(alambres.keys()):
        model = sklearn.linear_model.LinearRegression()


        X = alambres[alambre]['mediciones'][x].reshape(-1, 1)
        Y = alambres[alambre]['mediciones'][y].reshape(-1, 1)
        model.fit(X,Y)


        x_label = d_unidades[x]
        y_label = d_unidades[y]
        plt.legend(sorted(alambres.keys()))
        plt.xlabel(x_label)
        plt.ylabel(y_label)
        plt.plot(X,Y,'8',
                X, model.predict(X),'-')
    plt.title('Heating wires')

    plt.show()

要绘制电压与电流I run:

graficar_parametro('I','V')

得到了这张图片:

enter image description here

但是那里的颜色是错误的:

蓝点对应'Alambre_1',一个很好,但黄点应标记为'Nicromo',而ferronikel应该有红点不是绿线。

我认为使用sorted会解决问题,但它无法解决问题。

for alambre in sorted(alambres.keys()):
       plt.legend(sorted(alambres.keys()))

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是为matplotlib对象进行存储。你需要区分点图和线图。

def graficar_parametro(x,y):

d_unidades = {'I':'A','V':'V','R':'ohm','T':'C','P':'W/m'}
leg = [] # Storage for plots we want to legend
for alambre in sorted(alambres.keys()):
    model = sklearn.linear_model.LinearRegression()


    X = alambres[alambre]['mediciones'][x].reshape(-1, 1)
    Y = alambres[alambre]['mediciones'][y].reshape(-1, 1)
    model.fit(X,Y)


    x_label = d_unidades[x]
    y_label = d_unidades[y]

    plt.xlabel(x_label)
    plt.ylabel(y_label)
    dots, = plt.plot(X,Y,'8')
    line, = plt.plot(X, model.predict(X),'-')
    leg.append(line) # Choose what symbols will be represented in legend
plt.legend(leg, sorted(alambres.keys())) # Legend
plt.title('Heating wires')

plt.show()

如果您想要在图例中表示点和线,请按照以下方式附加到leg

leg.append((dots, line))