我想用二维数据集做一个散点图。假设我只有 3 个集群。然后,我可以为每个集群分配以下颜色:红色、绿色和蓝色。如果进行了软分配,那么每个数据点将有一定的概率属于每个集群。可以清楚地在散点图中用的 RGB 值绘制每个点,其中是该点属于集群的概率。
这适用于 2 或 3 节课。但是如果我有超过 3 个呢?有没有办法以直观的方式表示这些概率,保留每个样本在 2D 空间中的位置?如果提供任何有用的信息,我正在使用 R 进行绘图。
我想用二维数据集做一个散点图。假设我只有 3 个集群。然后,我可以为每个集群分配以下颜色:红色、绿色和蓝色。如果进行了软分配,那么每个数据点将有一定的概率属于每个集群。可以清楚地在散点图中用的 RGB 值绘制每个点,其中是该点属于集群的概率。
这适用于 2 或 3 节课。但是如果我有超过 3 个呢?有没有办法以直观的方式表示这些概率,保留每个样本在 2D 空间中的位置?如果提供任何有用的信息,我正在使用 R 进行绘图。
一般来说,这是一个具有挑战性的问题,特别是考虑到二维空间中的相对位置应该被保留的约束。
在没有该约束的情况下,我建议使用堆积条形图。使用细条和排序的数据集,颜色可以很容易地用于指示相当多的点属于不同集群的概率。像这样的图在群体遗传学中很常见,并且可以传达大量有用的信息,例如在这个例子中。
如果我们要坚持在二维中保留相对位置的约束,我可以想到一种解决方案,该解决方案适用于具有少量集群的中等大小的数据集。对于这些情况,您可以将每个点绘制成一个小饼图;饼图的各个部分表示属于每个集群的概率。
这是一个使用 3 个集群的工作示例
# Loading required libraries
library(e1071)
library(ggplot2)
library(scatterpie)
# Generating data frame
dat <- data.frame(a = c(rnorm(50, mean = 10, sd = 3),
rnorm(50, mean = 20, sd = 3),
rnorm(50, mean = 30, sd = 3)),
b = c(rnorm(50, mean = 10, sd = 5),
rnorm(50, mean = 20, sd = 3),
rnorm(50, mean = 30, sd = 3)))
# Identifying clusters and calculating cluster probabilities using
# fuzzy c-means clustering
clustdat <- cmeans(dat, centers = 3)
# Adding cluster information to dataset
dat$clusters <- as.factor(clustdat$cluster)
dat$A <- clustdat$membership[,1]
dat$B <- clustdat$membership[,2]
dat$C <- clustdat$membership[,3]
# Plotting
ggplot() + geom_scatterpie(aes(a, b, group = clusters),
data = dat, cols = LETTERS[1:3])
也许您不需要对分布进行精确编码。
为“混合”定义颜色,例如灰色。
和第二大概率之间的差异在您的集群调色板和灰色之间进行插值。