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)
当我正确理解你的数据时,这应该就可以了。
我有 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)
当我正确理解你的数据时,这应该就可以了。