Python 散点图:软聚类

Python scatter plot: soft clustering

我有 2D 数据,我使用软 classification 的 EM 算法对其进行了聚类。有 3 个不同的集群,因此我有一个维度为 (n_clusters、n_datapoints) 的概率向量。

现在我想在散点图中绘制各个数据点,并为每个聚类分配特定的颜色。每个点的颜色是根据在每个簇中的概率给出的,因此是簇颜色的混合。

我现在所能实现的是以下红色、绿色和蓝色簇颜色

Scatter plot

通过使用以下代码行:

for n in range(X.shape[0]):
    color = np.array([P[0,n],P[1,n],P[2,n]])[np.newaxis]
    plt.scatter(X[n,0],X[n,1],c=color)

如何为每个聚类分配不同的特定颜色?例如。 class 0 为橙色,class 1 为蓝色,class 2 为洋红色。

您可以使用 plotly 这是一个很好的图表库,因为这个 purposes.An 示例如下所示,您可以在其中为每个类别设置大小和颜色。

#import plotly library 
import plotly.express as px
#get the iris datset 
df = px.data.iris()
#plot the scatter plot by setting size and colour 
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 size='petal_length', hover_data=['petal_width'])
fig.show()

我会创建一个字典,其中每个簇都有自己的颜色。然后我将所有簇颜色相加并乘以它们的概率:

colors = []
cluster_colors = {0:np.array([255,0,0]),1:np.array([0,255,0]),2:np.array([0,0,255])}
for n in range(X.shape[0]):
    color = np.zeros([3])
    for c in range(P.shape[0]):
        color += cluster_colors[c]*P[c,n]

    colors.append(color)

当我正确理解你的数据时,这应该就可以了。