散点图中的颜色图例无法理解代码

2024-09-27 07:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望深入了解散点图,并试图了解如何制作不同颜色的图例。从网上的一个教程中,我们得到了这段代码,但无法理解它在做什么

# Prepare Data 
 # Create as many colors as there are unique midwest['category'] 
categories = np.unique(midwest['category']) 
colors = [plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))]

Tags: 代码datalen颜色ascreate教程prepare
2条回答

在这段代码中有一个隐含的假设,即唯一类别的数量是10或更少,因为tab10colormap只有10种颜色。尽管如此,在这种情况下,我们可能不会使用从0到1的均匀分布的浮点值来调用colormap,如果只有一个类别,它也会失败

相反,如果颜色数较少,可以选择像tab10这样的“分类”颜色映射,否则可以选择颜色较多的颜色映射

categories = np.unique(data)
if len(categories) <= 10: 
    colors = plt.cm.tab10(np.arange(len(categories)))
else:
    colors = plt.cm.viridis(np.linspace(0, 1, len(categories)))

colormap的目标是将间隔[0-1]内的数字映射到颜色

如果考虑tab10颜色映射,plt.cm.tab10(0.0)将返回颜色映射最左边的颜色,plt.cm.tab10(1.0)将返回最右边的颜色

enter image description here

在这里,用户希望获得与类别一样多的颜色(例如N),因此它们生成间隔为[0-1]的N个数字

例如,如果我们假设categories包含4个元素,那么

[i/float(len(categories)-1) for i in range(len(categories))]

返回

[0.0, 0.3333333333333333, 0.6666666666666666, 1.0]

通过将这些数字中的每一个传递给plt.cm.tab10(),这些数字被转换成4种单独的颜色

[plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))]

返回

[(0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0)]

请注意,这整件事可以写得更简洁,如下所示:

plt.cm.tab10(np.linspace(0,1,len(categories)))

enter image description here

相关问题 更多 >

    热门问题