背景
我有一些要点。
points = np.random.uniform(0,10, size = (10,2))
# array([[ 7.35906037, 6.50049804],
[ 3.21883403, 3.81452312],
[ 3.52107154, 1.68233797],
[ 1.47699577, 6.01692348],
[ 3.76051589, 0.25213394],
[ 8.93701081, 5.20377479],
[ 6.5347188 , 2.12940006],
[ 3.62550069, 5.80619507],
[ 1.33393325, 5.0088937 ],
[ 6.99034593, 7.40277623]])
他们被“分类”或标记。这意味着我有一个列表。
labels = np.random.randint(0,3, size = 10)
# array([2, 0, 1, 2, 2, 1, 1, 0, 1, 2])
这代表了points
中每个点的标签(按顺序)。
我还有一些额外的点。
extraPoints = np.random.uniform(0,10, size = (3,2))
# array([[ 1.91211141, 3.71208978],
# [ 8.10463536, 1.88948511],
# [ 9.79796593, 3.39432552]])
基本上,这些点中的每一个都确定了类标签。它如何确定标签并不重要。但你需要知道的是,每个额外的点都与一个且仅一个标签相关联。因此,额外的点的数量与标签的可能性相等。
问题:
我想做一个散点图。我想为extraPoints中的每个点分配不同的颜色,因此这种颜色将对应于每个类。这基本上意味着extraPoints [0]与类0相关联,extraPoints [1]与类1相关联,extraPoints [2]与类2相关联。
此外,我想在points中散点绘制点。请记住,points中的每个点都与labels中的相应标签相关联。例如,[7.35906037,6.50049804]在类2中,因此具有与extraPoints [2] = [9.79796593,3.39432552]相同的颜色。同样,points中的点[3.21883403,3.81452312]与labels中的类0相关联,因此具有与extraPoints [0] = [1.91211141,3.71208978]相同的颜色。
我的尝试:
我尝试使用plt.scatter()中的c参数,但我不太理解它的工作原理,有时它似乎有效,有时它会说“无效的RGBA参数0.0”,但似乎是任意的。
请注意,为了区分points和extraPoints,我将使extraPoints更大并具有更多的透明度。
import matplotlib.pyplot as plt
# I scatter the points, and assign c to labels. So hopefully each
# point that ends up in the same label will have the same
# color? I think this part is fine, although I am not sure
plt.scatter(points[:,0], points[:,1], c = labels)
plt.scatter(extraPoints[:,0], extraPoints[:,1], s = 100, alpha = 0.3, c = np.arange(len(extraPoints)))
正如你可以自己尝试的那样,对于不同的执行(因为每次我们都有随机数组),我们可能会做到正确(或几乎正确),或者得到标题中的错误。为什么会发生这种情况?
额外-对于勇敢的人
在这种情况下,想象一下我还有一些值。
values = np.random.uniform(0,50, size = 3)
# array([ 14.63459424, 37.41573654, 34.45202082])
我有与标签和额外点类型相同数量的值(即在这种情况下为3)。现在每个值都与相应的额外点相关联。因此,第一个值对应第一个额外点,以此类推。
我想制作上面的图,但颜色将具有“渐变”,例如,较小的值会变得更浅,较大的值则变得更暗(或反之亦然)。我该怎么做?我了解过颜色映射,但无法将其与我的问题完全整合。
示例
正如您所看到的,我无法控制颜色。不仅如此,而且我不知道哪个点属于哪个类别(除非我返回并手动查看每个点,但显然我不想这样做)。这就是为什么(以及其他原因,我不会在此处涉及)我希望根据values
中的值对它们进行着色。具体来说,我想要一个值范围[10, 20, 30]
,以指导我的点的颜色,以便我知道哪个类别“最强”。
c = np.arange(len(extraPoints))
。 - Euler_Saltercolors
和cmap
。然后会选择默认的颜色映射,我已经更新了答案,包括这种更简单的情况。 - ImportanceOfBeingErnestc
参数的所有学习内容,然后用[mcve]提出一个新的明确问题。可能实际问题只是将[5,1,4]
映射到[4,5,1,4,4,1,1,5,1,4]
,根据[2,0,1,2,2,1,1,0,1,2]
进行排序,但这也值得一个新问题,因为它与matplotlib无关。 - ImportanceOfBeingErnest