R语言 如何使用ggplot2在PCA双标图中添加符号?

nxagd54h  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(131)

我有一个数据集,其中包含来自70个池塘的存在-不存在(1-0)数据和(13)重金属浓度,我试图评估哪些重金属影响不同池塘中的蝾螈存在,因此我制作了一个PCA双标图。我想可视化哪些池塘蝾螈存在和不存在,以便我可以通过添加符号来查看哪些重金属与存在或不存在更相关(例如,圆圈,三角形,...),对应的存在或不存在的蝾螈在池塘。我在Rstudio工作。你真的会帮助我!提前感谢你的答案!
我用下面的代码来创建PCA双标图,但没有找到如何在其中添加符号。

# Putting heavy metals for PCA in new vector
heavymetals<-cbind(Newts[,24:38], Newts[,40:46])
heavymetals

# Creating biplot
cor(heavymetals, method = 'spearman')
library(vegan)
heavymetals_model<-rda(heavymetals,scale=TRUE)
biplot(heavymetals_model)

summary(heavymetals_model)
screeplot(heavymetals_model)

字符串
接下来,我试图用我有限的ggplot 2知识制作一个PCA双标图,并向AI寻求一些帮助,但它没有给我任何帮助。

inb24sb2

inb24sb21#

如果没有Newts数据或PCA对象,我们将从创建一个示例开始。

加载包

library(palmerpenguins) # Data for this example
library(ggplot2)
library(dplyr)
library(tidyr)
library(broom)
library(ggrepel)

字符串

Palmer Penguins数据的主成分分析

glimpse(penguins)
#> Rows: 344
#> Columns: 8
#> $ species           <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
#> $ island            <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
#> $ bill_length_mm    <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
#> $ bill_depth_mm     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
#> $ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
#> $ body_mass_g       <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
#> $ sex               <fct> male, female, female, NA, female, male, female, male…
#> $ year              <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…

peng_pca <- prcomp(~ bill_length_mm + bill_depth_mm + flipper_length_mm + body_mass_g, data = penguins, scale. = TRUE)

peng_pca
#> Standard deviations (1, .., p=4):
#> [1] 1.6594442 0.8789293 0.6043475 0.3293816
#> 
#> Rotation (n x k) = (4 x 4):
#>                          PC1          PC2        PC3        PC4
#> bill_length_mm     0.4552503 -0.597031143 -0.6443012  0.1455231
#> bill_depth_mm     -0.4003347 -0.797766572  0.4184272 -0.1679860
#> flipper_length_mm  0.5760133 -0.002282201  0.2320840 -0.7837987
#> body_mass_g        0.5483502 -0.084362920  0.5966001  0.5798821

创建前两个PC的散点图

peng_pca %>%
  augment(newdata = penguins) %>%
  ggplot(aes(x = .fittedPC1,
             y = .fittedPC2,
             color = species)) +
  geom_point() +
  theme_bw() +
  coord_equal()
#> Warning: Removed 2 rows containing missing values (`geom_point()`).


x1c 0d1x的数据

创建载荷图

tidy(peng_pca, 2, matrix = 'v') %>%
  mutate(PC = paste0('PC', PC)) %>%
  pivot_wider(names_from = PC, values_from = value) %>%
  ggplot() +
  geom_segment(aes(x = 0, y = 0, xend = PC1, yend = PC2)) +
  geom_label_repel(aes(x = PC1, y = PC2, label = column)) +
  coord_equal() +
  theme_bw()



创建于2023-12-12带有reprex v2.0.2

3htmauhk

3htmauhk2#

在一些额外的搜索之后,我找到了一些可以回答我的问题的东西。为了在我的PCA双标图中可视化蝾螈存在或不存在的水池,我使用了以下代码。

# Conducting a PCA using the prcomp()function instead of the rad()function
heavymetals_pca<-prcomp(heavymetals,scale. = TRUE)

# Code for the actual plot
library(ggfortify) 
autoplot(heavymetals_pca, data = Newts, colour = 'Newts_present',
         loadings = TRUE, loadings.colour = 'blue',
         loadings.label = TRUE, loadings.label.size = 3)

字符串
我希望它也能帮助一些和我有同样问题的人。结果:PCA biplot with clear presence absence visualised

相关问题