Python散点图:相同的颜色不接触

问题描述

考虑以下散点图。

import seaborn as sns
from sklearn.datasets import load_iris

k = load_iris().data[:,:2]
_ = sns.scatterplot(x=k[:,0],y=k[:,1])

enter image description here

假设我在这个数据集上运行了一个聚类算法,它只有两个特征/维度 x 和 y。聚类算法为散点图中的每个点生成一个聚类 id。集群 ID 在 [1..N] 中。我想对每个点进行不同的着色(根据其 id 使用颜色),但是,由于 N 非常大(N > 50),我用完了视觉上可区分的颜色。

比如说,我只获得了 M 种视觉上可区分的颜色(4

我知道这是可以解决的,因为任何平面图都是四种可着色的,并且已经在 python 中实现了图着色(例如 networkx)。我该怎么办?

解决方法

您可以生成一个矩阵,其中包含一个旋转的颜色列表,您将这些颜色排列在一起,使它们都不接触,然后将其用作点颜色。

import seaborn as sns
from sklearn.datasets import load_iris
from collections import deque

sns.set(rc={'figure.figsize':(16,9)})

k = load_iris().data[:,:2]

# Create a 100*100 matrix with no adjacent values
m = []
l = deque(['r','g','b','y']*25)

for x in range(100):
    m.append(list(l))
    l.rotate(2)

# Create color map by using values as coordinates to select
# from color matrix
colors = []
for e in k:
    p = [(int(str(x).replace('.',''))) for x in e]
    colors.append(m[p[0]][p[1]])
    
# Plot using colors from color map    
_ = sns.scatterplot(x=k[:,0],y=k[:,1],c=colors,s=250)

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...