2017-05-10 1 views
0

나는이 산점도를 파이썬으로 그리기 때문에 각 레이블마다 다른 점 (대비되는 색)으로 그 점을 그려야합니다. 각 레이블에는 여러 개의 점이 있습니다.plt.scatterplot의 각 레이블에 다른 색상 할당

는 주석을 공급하기 위해 뭔가를 할 수있는 것 같다,하지만 난 그것을 찾을 수 없어 같은 방법, 아주 확실하지 않다 :

for i, label in enumerate(labels): 
    x, y = low_dim_embs[i, :] 
    plt.scatter(x, y) 
    plt.annotate(label, 
       xy=(x, y), 
       xytext=(5, 2), 
       textcoords='offset points', 
       ha='right', 
       va='bottom') 

내가하여 위의 명령을 대체 할 수

plt.scatter(x, y, color=mycolors) 

수동으로 지정된 색상을 제공하지만 각 항목에 대해 (그리고 항목마다 반복 횟수가 많음) 어떤 값이 적용됩니까? 어떤 자동 방법이 있습니까?

내 데이터 세트는 다음과 같습니다

x,y,label 
1,2,label1 
1,3,label1 
2,-1,label1 
4,1,label2 
5,1,label2 
... 

각 (나는 또한 전설에서 그 필요 아마 것) 같은 색을 가져야한다 labelx에 속하는 좌표입니다.

답변

1

동일한 레이블에 동일한 색상 문제를 해결하려면 데이터의 각 고유 값에 고유 번호를 할당하는 색상 목록을 생성하는 스크립트를 작성하십시오 (이 코드 줄은 this answer에 설명되어 있음) :

날 에러 제공
import numpy as np 
import matplotlib.pyplot as plt 

line = plt.figure() 

data = [[1,1.5,3,2.4,5],[2,4.1,2.4,1,3],["apple","banana","grape","apple","banana"]]  

colors = [{ni: indi for indi, ni in enumerate(set(data[2]))}[ni] for ni in data[2]] 

plt.scatter(data[0], data[1], c=colors, cmap="plasma")  

for i in range(len(data[0])):  
    plt.annotate(str(data[2][i]), 
        xy=(data[0][i], data[1][i]), 
        xytext=(data[0][i], data[1][i]), 
        textcoords='offset points', 
        ha='right', 
        va='bottom') 

plt.show() 

enter image description here

+0

: C = 튜플 (MAP (플로트, c))을 형식 오류 'numpy.int64'객체는 반복 가능하지 않다. 또한, 10 개의 항목에 동일한 레이블이 있으면 같은 색상을 얻게됩니다. – dorien

+1

@dorien 아니요, 그 요구 사항을 충족시키지 못했을 것입니다. 편집하기 전에 그 사실을 알지 못했습니다. 미안합니다. 나는 내 대답을 업데이트하려고 노력할 것이다. –

+0

@dorien 이제 작동해야합니다. –

관련 문제