R ggplot2中按聚类组划分的颜色密度图

R ggplot2中按聚类组划分的颜色密度图,r,ggplot2,R,Ggplot2,我一直在对我的一些价值观进行聚类,然后对它们进行分组。然后,我使用ggplot2绘制一些密度图,并覆盖簇。下图为示例图像: 对于集群中的每个组,我绘制一个密度图并覆盖它们。密度图中的颜色对应于聚类中的分组 我的问题是,我已经根据分组手动拆分了数据,并将它们放在各自的文本表中(请参见下面的代码)。这是非常低效的,对于大型数据集来说可能非常乏味。如何在ggplot2中动态绘制密度图,而不将簇分离到各自的文本表中 原始输入表在拆分之前如下所示: scores <- read.table(tex

我一直在对我的一些价值观进行聚类,然后对它们进行分组。然后,我使用
ggplot2
绘制一些密度图,并覆盖簇。下图为示例图像:

对于集群中的每个组,我绘制一个密度图并覆盖它们。密度图中的颜色对应于聚类中的分组

我的问题是,我已经根据分组手动拆分了数据,并将它们放在各自的文本表中(请参见下面的代码)。这是非常低效的,对于大型数据集来说可能非常乏味。如何在
ggplot2
中动态绘制密度图,而不将簇分离到各自的文本表中

原始输入表在拆分之前如下所示:

scores <- read.table(textConnection("
file        max        min        avg               lowest
132         5112.0     6520.0     5728.0            5699.0
133         4720.0     6064.0     5299.0            5277.0
5           4617.0     5936.0     5185.0            5165.0
1           4384.0     5613.0     4917.0            4895.0
1010        5008.0     6291.0     5591.0            5545.0
104         4329.0     5554.0     4858.0            4838.0
105         4636.0     5905.0     5193.0            5165.0
35          4304.0     5578.0     4842.0            4831.0
36          4360.0     5580.0     4891.0            4867.0
37          4444.0     5663.0     4979.0            4952.0
31          4328.0     5559.0     4858.0            4839.0
39          4486.0     5736.0     5031.0            5006.0
32          4334.0     5558.0     4864.0            4843.0
"), header=TRUE)

得分通过这种方式,您可以使用4个面板自动创建所需的绘图

首先,数据:

scores <- read.table(textConnection("
file        max        min        avg               lowest
132         5112.0     6520.0     5728.0            5699.0
133         4720.0     6064.0     5299.0            5277.0
5           4617.0     5936.0     5185.0            5165.0
1           4384.0     5613.0     4917.0            4895.0
1010        5008.0     6291.0     5591.0            5545.0
104         4329.0     5554.0     4858.0            4838.0
105         4636.0     5905.0     5193.0            5165.0
35          4304.0     5578.0     4842.0            4831.0
36          4360.0     5580.0     4891.0            4867.0
37          4444.0     5663.0     4979.0            4952.0
31          4328.0     5559.0     4858.0            4839.0
39          4486.0     5736.0     5031.0            5006.0
32          4334.0     5558.0     4864.0            4843.0
"), header=TRUE)

file_vals <- read.table(textConnection("
file        avg_vals
                                   133         1.5923
                                   132         1.6351
                                   1010        1.6532
                                   104         1.6824
                                   105         1.6087
                                   39          1.8694
                                   32          1.9934
                                   31          1.9919
                                   37          1.8638
                                   36          1.9691
                                   35          1.9802
                                   1           1.7283
                                   5           1.7637
                                   "), header=TRUE)

评分感谢您的回答,但我如何缩放并将x轴添加到图表中?图形不一定适合相同的x轴比例。您可以使用
facet\u wrap
的另一个参数来允许基于每个面板中数据范围的x轴范围:
facet\u wrap(~time,scales=“free\u x”)
。请注意,无法使用ggplot2为配电盘指定不同的x轴。如果所有面板具有相同的x轴就足够了,您可以将以下内容添加到绘图中:
+coord_cartesian(xlim=c(3500,7000))
scores <- read.table(textConnection("
file        max        min        avg               lowest
132         5112.0     6520.0     5728.0            5699.0
133         4720.0     6064.0     5299.0            5277.0
5           4617.0     5936.0     5185.0            5165.0
1           4384.0     5613.0     4917.0            4895.0
1010        5008.0     6291.0     5591.0            5545.0
104         4329.0     5554.0     4858.0            4838.0
105         4636.0     5905.0     5193.0            5165.0
35          4304.0     5578.0     4842.0            4831.0
36          4360.0     5580.0     4891.0            4867.0
37          4444.0     5663.0     4979.0            4952.0
31          4328.0     5559.0     4858.0            4839.0
39          4486.0     5736.0     5031.0            5006.0
32          4334.0     5558.0     4864.0            4843.0
"), header=TRUE)

file_vals <- read.table(textConnection("
file        avg_vals
                                   133         1.5923
                                   132         1.6351
                                   1010        1.6532
                                   104         1.6824
                                   105         1.6087
                                   39          1.8694
                                   32          1.9934
                                   31          1.9919
                                   37          1.8638
                                   36          1.9691
                                   35          1.9802
                                   1           1.7283
                                   5           1.7637
                                   "), header=TRUE)
dat <- merge(scores, file_vals, by = "file")
d <- dist(dat$avg_vals, method = "euclidean")
fit <- hclust(d, method="ward")
groups <- cutree(fit, k=3)
cols <- c('red', 'blue', 'green', 'purple', 'orange', 'magenta', 'brown', 'chartreuse4','darkgray','cyan1')
dat$group <- cols[groups]
dat_re <- reshape(dat, varying = c("max", "min", "avg", "lowest"), direction = "long", drop = c("file", "avg_vals"), v.names = "value", idvar = "group", times = c("max", "min", "avg", "lowest"), new.row.names = seq(nrow(scores) * 4))
p <- (ggplot(dat_re ,aes(x = value))) +
geom_density(aes(fill = group), alpha=.3) +
scale_fill_manual(values=cols) +
labs(fill = 'Clusters') +
facet_wrap( ~ time)

print(p)