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)