具有相同颜色映射的 R 图

R plots with equal color mapping

以下代码生成显示的绘图。

library(ggplot2)
library(dendextend)
library(cowplot)
set.seed(1234)

N<-10

set1 <- mvrnorm(n = N, c(0,0), matrix(c(0.5,0,0,0.5),2))
df <- data.frame(set1,label=1:N)

# ?dist
# dist method options: "euclidean", "maximum", "manhattan", "canberra", "binary" or "minkowski"
set1.dist <- dist(x=df[1:2],method = "euclidean")

fit1 <- hclust(d=set1.dist, method = "complete")
df$cluster <- cutree(fit1,k = 3)

p1 <- ggplot(df) +
   geom_text(aes(x=X1,y=X2,label=label ,color=as.factor(cluster)))+
   theme(legend.position = "none")
# p1

# ?hclust
# hclust method options "ward.D", "ward.D2", "single", "complete", "average" (= UPGMA), "mcquitty" (= WPGMA), "median" (= WPGMC) or "centroid" (= UPGMC).
p2 <- hclust(d=set1.dist, method = "complete") %>%
   as.dendrogram() %>% 
   color_labels(k=3) %>% 
   set("branches_k_color", k = 3) %>% 
   as.ggdend() %>% 
   ggplot(horiz = T, theme = NULL) + 
   theme(axis.title.y = element_blank(),
         axis.text.y = element_blank(),
         axis.ticks.y = element_blank())
#plot(fit1,hang = -1, labels = df$label, main="Test",xlab = "")

#?rect.hclust()
plot_grid(p1,p2)

我想在两个图(散点图和树状图)中为聚类分配相同的颜色,但 none 我的尝试似乎成功了。我认为 dendrogramm 中的簇顺序错误或其他原因。

你的颜色模式的问题是你的值没有按照每个图的相同顺序排序。在右图中,hclust 将根据距离的函数对每个 id 进行排序,在左图中,它们按标签 id 排序。

要获得相同的顺序,您需要将 hclust 的顺序归因于您的数据框。您可以在 hclust 对象的变量 order 中找到此顺序:

> fit1$order
 [1]  5  6  2  3 10  4  1  7  8  9

因此,您现在可以通过以下方式在 df 中传递此订单(在定义其集群 ID 之后):

fit1 <- hclust(d=set1.dist, method = "complete")
df$cluster <- cutree(fit1,k = 3)
df <- df[order(match(df$label, fit1$order)),]

            X1         X2 label cluster
5  -0.67846476  0.3034370     5       2
6   0.07798362  0.3578356     6       2
2   0.70596583  0.1961721     2       2
3   0.54889439  0.7668157     3       2
10 -1.70825344 -0.6293518    10       3
4  -0.04557927 -1.6586588     4       1
1   0.33742619 -0.8535244     1       1
7   0.36133829 -0.4064025     7       1
8   0.64431246 -0.3865271     8       1
9   0.59196977 -0.3991278     9       1

现在要绘制第一个图,您需要根据以下顺序将 cluster 设置为因子和属性级别:

p1 <- df %>% mutate(cluster = factor(cluster, unique(cluster))) %>%
  ggplot()+
  geom_text(aes(x=X1,y=X2,label=label ,color=cluster))+
  theme(legend.position = "none")

那么,第二个剧情不变,最终得到:

它能回答您的问题吗?