R: ggplot для визуализации всех переменных в каждом кластере после кластерного анализа - PullRequest
0 голосов
/ 06 февраля 2020

Извините заранее, если пост не понятен. Итак, у меня есть мой фрейм данных, 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 переменных, которые я хочу видеть.

Я думаю, что шаг преобразования таблицы неправильный, но я не совсем понимаю, что пошло не так и как почини это.

Пожалуйста, просветите меня.

1 Ответ

1 голос
/ 07 февраля 2020

Мы можем попробовать это, я имитирую что-то похожее на ваш фрейм данных:

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")

enter image description here

Вы можете сохранить его как увеличенный участок для просмотра:

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