2016-10-10 13 views
1

我正在使用matplotlib Python庫創建PCA圖,我根據類值(它是0,1或2)選擇每個點的顏色。 要做到這一點,我使用名爲c的參數:如何轉換scatter(來自matplotlib)的c變量的值?

plt.scatter(pca_data[:, 0], pca_data[:, 1], c=[0,1,1,0,2]) 

我希望做的就是添加一個傳奇,從情節的顏色與標籤鏈接,但是,我找不到值怎麼得( 0,1或2)轉換爲實際顏色。

我曾經想過直接給顏色,但我希望這個過程是自動化的,所以無論實際的課程數量如何,它都可以工作。

我試過使用to_rgb (from matplotlib.colors)但由於值不在0和1之間,它不起作用,如果我縮放它們,最終會得到一個奇怪的顏色矢量(黑色,白色,黑色)。

有什麼想法?

謝謝。

回答

0

這裏是有3個標籤的例子(但該方法可擴展到任何數量的):

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import matplotlib.colors as colors 

pca_data = np.random.randn(100,2) #some fake data 
labels = np.random.randint(low=0,high=3,size=100) #some fake class labels 

cNorm = colors.Normalize(vmin=0,vmax=2) #normalise the colormap 
scalarMap = cm.ScalarMappable(norm=cNorm,cmap='hot') #map numbers to colors 

fig,ax = plt.subplots() 
for i in np.unique(labels): 
    ax.scatter(pca_data[labels==i,0],pca_data[labels==i,1],\ 
       c=scalarMap.to_rgba(i),label="class {}".format(i),s=100) 

ax.legend(scatterpoints=1) 

enter image description here