2017-02-02 9 views
-1

プロットするファイルが3つあります(pos_Felix、pos_Iando、pos_Fabiotto)。何らかの理由で私はそれらを一意のファイルにまとめる必要があります。再現可能なコードは、次のとおりです。いくつかの単語でpython:反復伝説のプロット

from matplotlib import pylab 
import numpy 

pos_Felix = numpy.array([ [ 3.05150657e-01, -7.33839341e-01], 
         [ 3.24785115e-01, -5.70699171e-01], 
         [ -1.90952119e-02, -9.31596157e-01], 
         [ 1.01292710e+00, -3.75807265e-01], 
         [ 3.32793456e-01, -6.54133767e-01]]) 

pos_Iando = numpy.array([ [ 3.41211808e-04, -1.43754261e-02], 
         [ -1.18384581e-01, -4.84193704e-01]]) 

pos_Fabiotto = numpy.array([ [ -4.63776141e-01, 1.62560557e+00]]) 

pos_all = numpy.concatenate([pos_Felix,pos_Iando,pos_Fabiotto],axis=0) 


myColors = ['green']*pos_Felix.shape[0] + ['red']*(pos_Iando.shape[0]+pos_Fabiotto.shape[0]) 

myShapes = ['.']*pos_Felix.shape[0]  + ['^']*pos_Iando.shape[0]  + ['*']*pos_Fabiotto.shape[0] 
myLabels = ['Felix']*pos_Felix.shape[0] + ['Iando']*pos_Iando.shape[0] + ['Fabiotto']*pos_Fabiotto.shape[0] 



pylab.figure() 
pylab.title("Multi Dimensional Scaling") 
pylab.xlabel("X") 
pylab.ylabel("Y") 
for i in range(pos_all.shape[0]): 
    pylab.plot(pos_all[i,0],pos_all[i,1],myShapes[i], color=myColors[i], label=myLabels[i]) 
pylab.legend(loc="upper left") 

pylab.show() 

を、私は一連の点をプロットする必要があり、(私が「を」構築物は最良のものではないことを確信しているが、少なくともそれは今のところ動作します)それぞれが色を持ち、それぞれがカテゴリ(「Felix」、「Iando」および「Fabiotto」)に属し、それぞれにマーカーが付いています。凡例を除いてグラフはOKです。それは(私が削除したいものを赤に)代わりに、私は、次の画像を取得する3の長さが8である:私は私の問題を解決する簡単な方法があると確信して

enter image description here

...しかし、私はどちらがわからないのですか? ps =適切な場所に3つの要素しかない伝説のリストを作成することができることは分かっていますが、実際のケースでは非常に長いリストがあり、自動化された手順が必要です。

+0

色と名前をハードコードするので、凡例のエントリをハードコードすることもできます。この例は、「非常に長い」リストを持つ「実際のケース」には適用されません。考えられる答えは、「実際のケース」のデータとラベル、色、図形のマッピング方法を知る必要があります。 – ImportanceOfBeingErnest

+0

私はもっと一般的にしようとしました。 –

答えて

0

すべての繰り返しのラベルが連続している場合、これは動作するはずです:

pylab.figure() 
pylab.title("Multi Dimensional Scaling") 
pylab.xlabel("X") 
pylab.ylabel("Y") 
last_label = None 
for i in range(pos_all.shape[0]): 
    label = myLabels[i] 
    if label == last_label: 
     label = None 
    else: 
     last_label = label 
    pylab.plot(pos_all[i,0],pos_all[i,1],myShapes[i], color=myColors[i], label=label) 
pylab.legend(loc="upper left") 

pylab.show() 

あなたはまた、{label:style}で辞書を作成し、同じ名前で設定し、すべてのデータを取得することを確認するために、すでにラベルされたプロットのリストを保つことができます(if label in list_labelsの代わりにlabel == last_label)のラベルが付いています。

+0

はい、最後に私は同様のもので解決しました。ありがとう! –

1

名前ごとに個々の配列にアクセスできるように思われるので、名前ごとに3つのプロットを作成するだけです。

pylab.figure() 
pylab.title("Multi Dimensional Scaling") 
pylab.xlabel("X") 
pylab.ylabel("Y") 

pylab.plot(pos_Felix[:,0],pos_Felix[:,1],".", color="green", label="Felix") 
pylab.plot(pos_Iando[:,0],pos_Iando[:,1],"^", color="red", label="Iando") 
pylab.plot(pos_Fabiotto[:,0],pos_Fabiotto[:,1],"*", color="red", label="Fabiotto") 

pylab.legend(loc="upper left") 

pylab.show()