matplotlib 如何从散布中的c变量转换值?

piok6c0g  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在使用matplotlib Python库创建PCA图,我根据类值(0,1或2)选择每个点的颜色。为此,我使用名为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之间,它不起作用,如果我缩放它们,我最终会得到一个奇怪的颜色向量(黑色,白色,黑色)。

lyfkaqu1

lyfkaqu11#

下面是一个例子,其中有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)

字符串


的数据

相关问题