2016-05-07 5 views
0

Я черчение данных из Словаря, который имеет три клавиши:Мессинг этикетка цвета в Matplotlib

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

И каждый из этого есть несколько Params как сопротивления, напряжение таких а как , так что я с помощью чтобы легко отображать значения.

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() 

Для построения графика напряжения против тока я бегу:

graficar_parametro('I','V') 

И получил эти изображения:

enter image description here

Но цвета не так:

Синие точки соответствуют к «Alambre_1», что все хорошо, но желтые точки должны быть labe поскольку «Никромо» и ферроникель должны иметь красные точки не зеленую линию.

Я решил использовать sorted, чтобы решить проблему, но это не исправить.

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

ответ

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)) 
+0

что делает линию «» стоять в разделе»,? –

+1

'plt.plot (X, model.predict (X), '-')' - массив с одним элементом Line2D. Вы просто распаковываете этот массив, так что 'line = Line2D.object'. –

Смежные вопросы