2011-08-05 28 views
4

私はpythonでmatplotlibライブラリを使用して、パブリケーション品質のxy散布図を生成しています。私は伝説のマーカーに関する問題に遭遇しました。私は2つの異なるxy-散乱系列をプロットしています。 1つは曲線を形成するxy点の集合であり、他方は単一のxy点である。Matplotlibの凡例:複数のscatterpoints値を割り当てる方法

「曲線」には3つのマーカー、1つのポイントには1つのマーカーが表示されます。私が凡例マーカーの数を変更する方法を知っている唯一の方法は、凡例を宣言するときに "scatterpoints"引数を使用することです。しかし、この引数はのマーカーの数をすべて凡例のシリーズに設定しており、各凡例の変更方法はわかりません

悲しいことに、私は新しいユーザーとして写真を投稿できませんが、この説明で十分です。 matplotlibを使って各凡例の項目ごとに個別に散点値を設定する方法はありますか?

EDIT:ここには、散点の値が異なる画像を示すリンクがあります。

scatterpoints = 3:http://imgur.com/8ONAT

scatterpoints = 1:http://imgur.com/TFcYV

うまくいけば、この問題は、もう少し明確になります。

+0

次の3つの「セグメント」の「曲線」を分割し、セグメントごとに異なるマーカーを使用するようにしたいですか?散布図「曲線」のポイントにどのようにマーカーを割り当てたいのですか? –

答えて

4

凡例の行を取得し、それを自分で変更することができます。

import numpy as np 
import pylab as pl 
x = np.linspace(0, 2*np.pi, 100) 
pl.plot(x, np.sin(x), "-x", label=u"sin") 
pl.plot(x, np.random.standard_normal(len(x)), 'o', label=u"rand") 
leg = pl.legend(numpoints=3) 
l = leg.legendHandles[1] 
l._legmarker.set_xdata(l._legmarker.get_xdata()[1:2]) 
l._legmarker.set_ydata(l._legmarker.get_ydata()[1:2]) 
##or 
#l._legmarker.set_markevery(3) 
pl.show() 

Legend.legendHandlesは、凡例内のすべての行のリストで、ラインの_legmarker属性がマークです。

マークの数を変更するには、set_markevery(3)またはset_xdata()& set_ydata()を呼び出すことができます。

enter image description here

+0

この回答は私にとって素晴らしい仕事でした、ありがとうございました。 1つの警告を追加します:_legmarker属性は、pyplot.plot()によって生成されたLine2Dコレクションに存在しますが、pyplot.scatter()によって生成されるRegularPolyCollectionコレクションには存在しません。私がplt.scatter()からplt.plot()にプロットする必要があった単一点を単純に変換したので、これは私の場合は大丈夫でした。 –

関連する問題