繁体   English   中英

ggplot2 中 PCA 分数的 Facetgrid

[英]Facetgrid of PCA scores in ggplot2

我有一组 PCA 值,其中第一列是 label。 我想要做的是为前两个主要组件中的每一个生成一个配对图,即每个类别组合的 PC1 与 PC2 的散点 plot(此处包括 3 个)。 附件是我的部分数据集的文本 csv。 我尝试使用 ggpair 但我不知道如何将附加的数据按摩成它想要的格式,部分原因是它不知道如何忽略 NA。

p1 <- ggplot(irdf, aes(PC1, PC2,colour=Category)) +
  geom_point() +
  stat_ellipse()

此代码生成数据重叠的散点图。

绘图输出

CSV:

,Category,PC1,PC2,PC3,PC4
120,A,-0.004010778,-0.001078139,0.002560689,-0.002477077
121,A,0.00137385,-0.003251322,-0.0012312,0.002884072
122,A,0.00137385,-0.003251322,-0.0012312,0.002884072
123,A,0.00137385,-0.003251322,-0.0012312,0.002884072
124,A,0.00137385,-0.003251322,-0.0012312,0.002884072
125,A,-0.005530058,0.000206478,-0.003651934,0.000106734
126,A,-0.005530058,0.000206478,-0.003651934,0.000106734
127,A,-0.005530058,0.000206478,-0.003651934,0.000106734
128,A,-0.005530058,0.000206478,-0.003651934,0.000106734
129,C,0.05459126,0.004348095,0.01402585,-0.001921671
130,C,0.005382812,0.004915268,-0.001480362,0.000944579
131,C,0.002448355,0.012424871,-0.008416275,0.000361269
132,C,-0.000936612,0.003991578,-0.001986253,0.001497678
133,C,-0.003822607,0.024979002,-0.009948887,-0.0015799
196,C,-0.020830672,0.015967276,-0.003338178,0.004129992
197,C,0.003977212,0.002084443,-2.15E-05,0.002564937
198,C,0.008799044,-0.009520658,-0.007143308,0.00033937
199,C,-0.003273719,-0.005096245,-0.001200353,0.00038518
200,C,-0.021442262,0.022713865,-0.011194163,0.000664158
201,C,-0.005399877,0.004867002,0.001075927,0.000930286
202,C,-0.001082562,-0.00174273,0.0030125,0.002118374
203,C,0.004913886,-0.006648075,-0.004697749,0.000364076
204,C,0.00141842,0.000320859,0.006396322,0.005044266
205,C,0.002011682,-0.00444237,0.000991321,0.00328382
206,C,0.003169989,-0.003892362,-0.001063221,-0.000253309
207,C,0.002139646,-0.006559916,-0.001683837,0.000612287
208,J,0.05459126,0.004348095,0.01402585,-0.001921671
209,J,0.003098164,-0.005939099,-0.00471109,-0.000507244
210,J,0.004762399,-0.005833026,-0.003249797,-0.000238942
211,J,-0.001493766,5.86E-05,0.002030541,0.001575403
212,J,-0.001501058,0.000437217,0.003820577,0.001316014
213,J,-0.002753525,0.000915653,0.001490557,0.00172809
214,J,-0.001670349,0.001603777,0.003935583,0.001931291
215,J,-0.001667739,0.000914704,0.001519535,0.000950852
216,J,0.002700166,-0.002849805,-0.005260336,-0.000976289
217,J,-0.002990762,-0.001229752,0.001240857,0.001728149
218,J,-0.001466045,-0.002434853,0.00041103,0.000900405
219,J,-0.002735407,-0.001136517,0.003169908,0.002208108
220,J,-0.001163076,-0.000313097,-0.001645696,0.000254576
221,J,0.001285879,-0.004654998,-0.001721707,0.000129652

更新

我确实设法解决了自己的问题,但感觉很难看。 诀窍是用所有可能的散点对填充一个小标题,如下所示。 如果有不那么丑陋的方式,请有人告诉我吗?

好 plot

    i<-1
joined_subset_full<-NULL
for (Cell_r in unique(subset$Cell)){
  for (Cell_c in unique(subset$Cell)){

    subset_df_c<- subset(irdf,Cell==Cell_c)
    subset_df_r<- subset(irdf,Cell==Cell_r)

    cell_c_tibble <- as_tibble(data.frame(Cell_c))
    cell_r_tibble <- as_tibble(data.frame(Cell_r))

    joined_subset_c <- cbind(subset_df_c,cell_r_tibble,cell_c_tibble)
    joined_subset_r<- cbind(subset_df_r,cell_c_tibble,cell_r_tibble)

    joined_subset_full[[i]] <- rbind(joined_subset_c,joined_subset_r)
    i <- i +1
  }
}

joined_subset_facet_tibble = bind_rows(joined_subset_full)

p1 <- ggplot(joined_subset_facet_tibble, aes(`Comp 1`, `Comp 2`,colour=Cell)) +
  geom_point() +
  stat_ellipse()+
  facet_grid(Cell_r~Cell_c)
p1

我不知道我是否遗漏了什么。 但是您提供的代码并未将数据分成不同的方面。 这就是为什么您将所有 3 个类别重叠在同一个 plot 中的原因。

要在不同的面板中分开,您需要在代码末尾添加对facet_grid()facet_wrap()的调用。

您只有一个分组变量,因此您的方面 plot 可能是单行或单列。 您的示例中的图(我相信这是您希望实现的)显示了一个二维网格,但只有主对角线有数据。 这似乎是浪费空间...

如果您有两个分组变量,那么二维网格将是有意义的。

要获得具有单列的方面 plot,您可以使用:

irdf %>%
ggplot(aes(PC1, PC2,colour=Category)) +
  geom_point() +
  stat_ellipse() +
  facet_grid(rows=vars(Category))

在此处输入图像描述

最后一个命令你缺少什么。 它告诉 ggplot 创建单独的面板,每个类别一个,plot 三个在一个列中。

现在,如果您有两个分组变量,您可以使用以下代码创建一个网格(这里,我只是创建了另一个名为cat2的列,其数据与Category相同):

irdf %>% mutate(cat2 = Category) %>%
  ggplot(aes(PC1, PC2,colour=Category)) +
  geom_point() +
  stat_ellipse() +
  facet_grid(rows=vars(Category), cols=vars(cat2))

在此处输入图像描述

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM