2017-07-17 19 views
2

凡例に色とマーカーの両方を表示したい。色は1つのことを意味し、マーカーは別のものを意味します。添付画像のように見えるはずです。これは私が持っている現在のコードです:カラーとマーカーの両方の凡例を作成するには?

x = np.arange(20) 
y = np.sin(x) 

fig, ax = plt.subplots() 
line1 = ax.scatter(x[:10],y[:10],20, c="red", picker=True, marker='*') 
line2 = ax.scatter(x[10:20],y[10:20],20, c="red", picker=True, marker='^') 

ia = lambda i: plt.annotate("Annotate {}".format(i), (x[i],y[i]), visible=False) 
img_annotations = [ia(i) for i in range(len(x))] 

def show_ROI(event): 
    for annot, line in zip([img_annotations[:10],img_annotations[10:20]], [line1, line2]): 
     if line.contains(event)[0]: 
      ... 
    fig.canvas.draw_idle() 

fig.canvas.mpl_connect('button_press_event', show_ROI) 

plt.show() 

enter image description here

+0

次の2つの別々の伝説を意味していますか? – DavidG

+0

@DavidG、1つの凡例または2つの別個の凡例にすることができますが、マーカーは色に固有ではありません。マーカーは異なる色を持つことができます。そして、色は異なるマーカーを持つことができます。 – matchifang

+0

あなたは、期待された/望む結果がどのようなものであるかの例(できればイメージ)を提供できますか? – DavidG

答えて

4

以下は、異なるマーカーと色凡例を作成するためにproxy artistsを使用する方法の一般的な例だろう。

import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.rand(8,10) 
data[:,0] = np.arange(len(data)) 

markers=["*","^","o"] 
colors = ["crimson", "purple", "gold"] 


for i in range(data.shape[1]-1): 
    plt.plot(data[:,0], data[:,i+1], marker=markers[i%3], color=colors[i//3], ls="none") 

f = lambda m,c: plt.plot([],[],marker=m, color=c, ls="none")[0] 

handles = [f("s", colors[i]) for i in range(3)] 
handles += [f(markers[i], "k") for i in range(3)] 

labels = colors + ["star", "triangle", "circle"] 

plt.legend(handles, labels, loc=3, framealpha=1) 

plt.show() 

enter image description here

関連する問題