2016-05-07 9 views
0

matplotlibの中で色をラベル簡単に値をプロットする関数です。メッシングは、私は3つのキーを持っている辞書からデータをプロットしてい

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

私は実行し、現在の電圧Vsをプロットする:

graficar_parametro('I','V') 

そして、この画像を得た:

enter image description here

をしかし、色が間違ってあります

ブルードットが対応'Alambre_1'には問題はありませんが、黄色の点は小文字にする必要があります「Nicromo」として導かれ、フェロニクは緑の線ではなく赤い点を持つべきです。

私はsortedを使用して問題を解決すると思っていましたが、それを修正しません。

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

答えて

1

これを行う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要素を1つ持つ配列です。この配列をアンパックするだけで 'line = Line2D.object'となります。 –