【问题标题】:R: ggplot to visualize all variables in each cluster after cluster analysisR: ggplot 在聚类分析后可视化每个聚类中的所有变量
【发布时间】:2020-07-13 12:29:23
【问题描述】:

如果帖子不清楚,请提前抱歉。 所以我有我的数据框、74 个观察值和 43 列。我对它们进行了聚类分析。 然后我得到了 5 个集群,并将集群编号分配给每一行。 现在, 我的 df 有 74 行(obs)和 44 个变量。对于所有变量,我想在每个集群中绘制并查看哪些变量是丰富的,哪些变量不是。

我想通过 ggplot 来实现这一点。 我想象的输出面板是每行有 5 个箱线图和 42 行图,每行将描述数据集中测量的变量。

数据集示例(抱歉,它太大了,所以我做了一个例子,实际值不同)

df
ID    EGF   FGF_2    Eotaxin   TGF   G_CSF   Flt3L   GMSF   Frac IFNa2 .... Cluster
4300  4.21  139.32    3.10     0      1.81   3.48    1.86   9.51  9.41 ....    1
2345  7.19  233.10    0        1.81   3.48   1.86    9.41   0     11.4 ....    1
4300  4.21  139.32    4.59     0      1.81   3.48    1.86   9.51  9.41 ....    1
....
3457  0.19  233.10    0        1.99   3.48   1.86    9.41   0     20.4 ....    3
5420  4.21  139.32    3.10     0.56   1.81   3.48    1.86   9.51  29.8 ....    1
2334  7.19  233.10    2.68     2.22   3.48   1.86    9.41   0     28.8 ....    5

str(df)

$ ID        : Factor w/ 45 levels "4300"..... : 44 8 24 ....
$ EGF       : num ....
$ FGF_2     : num ....
$ Eotaxin   : num ....
....
$ Cluster   : Factor w/ 5 levels "1" , "2"...: 1 1 1.....3 1 5

#now plotting
#thought I pivot the datafram
new_df <- pivot_longer(df[,2:44],df$cluster, names_to = "Cytokine measured", values_to = "count")

#ggplot
ggplot(new_df,aes(x = new_df$cluster, y = new_df$count))+
geom_boxplot(width=0.2,alpha=0.1)+
geom_jitter(width=0.15)+
facet_grid(new_df$`Cytokine measured`~new_df$cluster, scales = 'free')

因此,代码确实生成了一小部分符合我想象输出的图表。但我只能看到 5 行而不是 42 行。

回到 new_df,最后 3 列引起了我的注意:

Cluster    Cytokine measured    count
 1          EGF                 2.66
 1          FGF_2               390.1
 1          Eotaxin             6.75
 1          TGF                 0 
 1          G_CSF               520 
 3          EGF                 45
 5          FGF_2               4
 4          Eotaxin             0
 1          TGF                 0 
 1          G_CSF               43
 ....

因此,簇数和计数列似乎是正确的,而测量的细胞因子只是不断重复 5 个变量名称,而不是我想查看的总共 42 个变量。

我认为表格转换步骤是错误的,但我不太清楚出了什么问题以及如何解决它。

请赐教。

【问题讨论】:

  • 请修改您的问题,使其他人可以重现:stackoverflow.com/questions/5963269/… 这是本论坛的标准做法,可帮助人们为您提供更好的答案,减少因潜在误解而浪费的时间。

标签: r ggplot2 cluster-analysis


【解决方案1】:

我们可以试试这个,我模拟一些看起来像你的数据框的东西:

df =  data.frame(
ID=1:74,matrix(rnorm(74*43),ncol=43)
)
colnames(df)[-1] = paste0("Measurement",1:43)
df$cluster = cutree(hclust(dist(scale(df[,-1]))),5)
df$cluster = factor(df$cluster)

然后融化:

library(ggplot2)
library(tidyr)
library(dplyr)
melted_df = df %>% pivot_longer(-c(cluster,ID),values_to = "count")

g = ggplot(melted_df,aes(x=cluster,y=count,col=cluster)) + geom_boxplot() + facet_wrap(~name,ncol=5,scale="free_y")

您可以将其保存为更大的情节以查看:

ggsave(g,file="plot.pdf",width=15,height=15)

【讨论】:

  • Hollysh*t,效果很好。谢谢@stupidwolf。现在我还学会了如何从这段代码中融合数据。起初所有代码都运行,但绘图窗口没有更新。但是当我保存情节并打开它时,它看起来很漂亮!星期五最好的事情!
猜你喜欢
  • 2019-01-23
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2019-01-27
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多