2017-12-15 27 views
1

분산 플롯에 두 개의 매트릭스 값을 플롯하려고합니다. 산점도 (scatterplot)의 각 점에 대해, 나는 어느 열과 어느 행에 있는지 알고 싶다. 다른 행에 대해서는 여러 색상을 사용합니다. 다른 열에 대해서는 다른 표식을 사용합니다. 전설에서 나는 색 (열에 해당)과 마커 (문자에 해당)를 나타 내기를 원합니다. 나는 전설에서 칼럼을 얻을 수 있었지만 그 줄은 얻을 수 없었다. 단순화 된 코드는 다음과 같습니다.색상 및 마커에 대한 범례

x = np.array([[np.nan, 5, 6], [3, 4, 8], [0, 0, 9]]) 
y = np.array([[np.nan, 4, 7], [7, 8, 2], [1, 2, 7]]) 
color = np.array([['b','g','r'],]*3).transpose() # Can be other colours than b,g,r 
marker = ['o', 'v', '^'] 
label = ['A','B','C'] 
for j in range(3): 
    plt.scatter(x[:,j], y[:,j], c=color[:,j], marker=marker[j], label=label[j]) 
plt.xlabel("xlabel") 
plt.ylabel("ylabel") 
plt.legend(loc=2) 
plt.show() 
plt.ylabel("ylabel") 
plt.legend(loc=2) 

어떻게 마커를 추가 할 수 있습니까? 그리고 내 전설에서 첫 번째 마커는 녹색이고 다른 두 개는 파란색입니다. 이 문제를 해결할 수있는 방법이 있습니까?

답변

1

전설을 만들기위한 아이디어는 프록시 아티스트 (즉, 범례에만 사용됨)를 만드는 것입니다 : plt.legend(list_of_proxy_artists, list_of_labels). 행에 대한

proxy = plt.plot([], [], 'o', markerfacecolor='w', markeredgecolor='k')[0]

그리고 색깔의 사각형이 패치를 만들 수 있습니다 :

patch = mpatches.Patch(color='r')

함께 최선을 다하는

열 마커에 빈 줄을하려하여 얻을 수 있습니다 :

import numpy as np 
from matplotlib import pyplot as plt 
import matplotlib.patches as mpatches 

x = np.array([[np.nan, 5, 6], [3, 4, 8], [0, 0, 9]]) 
y = np.array([[np.nan, 4, 7], [7, 8, 2], [1, 2, 7]]) 
color = np.array([['b','g','r'],]*3).transpose() # Can be other colours than b,g,r 
marker = ['o', 'v', '^'] 

for j in range(3): 
    plt.scatter(x[:,j], y[:,j], c=color[:,j], marker=marker[j]) 
plt.xlabel("xlabel") 
plt.ylabel("ylabel") 

# legend 
label_column = ['A','B','C'] 
label_row = ['1', '2', '3'] 
rows = [mpatches.Patch(color=color[i, 0]) for i in range(3)] 
columns = [plt.plot([], [], marker[i], markerfacecolor='w', 
        markeredgecolor='k')[0] for i in range(3)] 

plt.legend(rows + columns, label_row + label_column, loc=2) 

plt.show() 

enter image description here