나는이 두 벡터 등 1,2,3와 같은 수준의 레이블 값을 하나 하나하기 matplotlib 색상 레이블
내가 빨간색으로 1 급에 속하는 모든 점을 플롯 싶습니다, 파란색으로 2 등급으로, 3 등급으로 녹색으로. 어떻게해야합니까?
나는이 두 벡터 등 1,2,3와 같은 수준의 레이블 값을 하나 하나하기 matplotlib 색상 레이블
내가 빨간색으로 1 급에 속하는 모든 점을 플롯 싶습니다, 파란색으로 2 등급으로, 3 등급으로 녹색으로. 어떻게해야합니까?
는 2 차원 배열의 데이터를 가지고 있다고 가정하면,이 작업을해야합니다 :
import numpy
import pylab
xy = numpy.zeros((2, 1000))
xy[0] = range(1000)
xy[1] = range(1000)
colors = [int(i % 23) for i in xy[0]]
pylab.scatter(xy[0], xy[1], c=colors)
pylab.show()
을 또한 색상은 색상 맵의 사용을 통해 표시되는 제어하는 cmap
속성을 설정할 수 있습니다; 즉와 pylab.scatter
라인 교체 : 컬러 맵의 목록을 찾을 수
pylab.scatter(xy[0], xy[1], c=colors, cmap=pylab.cm.cool)
을 허용 대답은 당신이 할당되어야하는 클래스 레이블을 지정할 수 있습니다 경우가 발견,하지만이 here
특정 색상이나 레이블을 사용하면 다음 작업을 수행 할 수 있습니다. 컬러 바를 사용하여 체조를 조금했는데 줄거리를 만드는 것이 멋진 한 줄 짜기로 줄어 들었습니다. 이것은 sklearn을 사용한 분류 결과를 플로팅 할 때 유용합니다. 각 레이블은 (x, y) 좌표와 일치합니다.
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
N = 23 # Number of labels
# setup the plot
fig, ax = plt.subplots(1,1, figsize=(6,6))
# define the data
x = np.random.rand(1000)
y = np.random.rand(1000)
tag = np.random.randint(0,N,1000) # Tag each point with a corresponding label
# define the colormap
cmap = plt.cm.jet
# extract all colors from the .jet map
cmaplist = [cmap(i) for i in range(cmap.N)]
# create the new map
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)
# define the bins and normalize
bounds = np.linspace(0,N,N+1)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
# make the scatter
scat = ax.scatter(x,y,c=tag,s=np.random.randint(100,500,N),cmap=cmap, norm=norm)
# create the colorbar
cb = plt.colorbar(scat, spacing='proportional',ticks=bounds)
cb.set_label('Custom cbar')
ax.set_title('Discrete color mappings')
plt.show()
준다 : 다음 this 대답의 약간 수정 된 버전을 사용
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
x = [4,8,12,16,1,4,9,16]
y = [1,4,9,16,4,8,12,3]
label = [0,1,2,3,0,1,2,3]
colors = ['red','green','blue','purple']
fig = plt.figure(figsize=(8,8))
plt.scatter(x, y, c=label, cmap=matplotlib.colors.ListedColormap(colors))
cb = plt.colorbar()
loc = np.arange(0,max(label),max(label)/float(len(colors)))
cb.set_ticks(loc)
cb.set_ticklabels(colors)
는
하나는 N 컬러를 위해 상기를 일반화
23 색으로 만들 수 있습니까? (OP가 말했듯이, 나도 마찬가지입니다.) 1k 무작위 포인트가 있습니까? 당신의 대답은 훌륭하고 그림에 대한 나의 업보트를 가지고 있지만 이것이 10 가지 이상의 수업에서 효과가 있는지 알고 싶습니다. –
위의 수정 사항을 참조하십시오. – salomonvh
대단히 감사합니다. –
간단한 해결책은 각 클래스에 색상을 지정하는 것입니다. 이렇게하면 각 색상이 각 클래스에 대해 어떻게 표시되는지 제어 할 수 있습니다. 예 :
arr1 = [1, 2, 3, 4, 5]
arr2 = [2, 3, 3, 4, 4]
labl = [0, 1, 1, 0, 0]
color= ['red' if l == 0 else 'green' for l in labl]
plt.scatter(arr1, arr2, color=color)
사실 내 데이터에는 23 개의 레이블이 있습니다. 그래서 색상 벡터를 xy와 같은 벡터 길이의 목록 형태로 0에서 22까지 할당했습니다. 그러나 시퀀스 길이가 3 또는 4 여야한다는 오류가 나타납니다. – user1050325
질문에 몇 가지 예제 코드와 오류 메시지를 추가 할 수 있습니까? 나는 여기에 배치 한 간단한 예제를 1000 포인트와 23 개의 레이블로 수정했습니다. – brentlance
플롯 기능을 사용할 때 오류가 발생하지 않습니다. 불행히도 내 코드를 플롯 기능으로 덮어 썼기 때문에 오류를 복제 할 수 없었습니다. – user1050325