R語言ggplot2給PCA散點(diǎn)圖結(jié)果上添加水平和垂直誤差線

image.png

公眾號(hào)后臺(tái)有讀者留言問這個(gè)圖的實(shí)現(xiàn)辦法,這個(gè)圖相比于普通的PCA散點(diǎn)圖是多了一個(gè)垂直和水平的誤差線,這個(gè)如何實(shí)現(xiàn)之前還沒有嘗試過,所以查了查資料,找到了一個(gè)參考鏈接

https://cran.r-project.org/web/packages/SIBER/vignettes/Plot-SIA-ggplot2.html

按照這個(gè)參考鏈接的代碼 我們?cè)囋?。用之前提到的小麥種子數(shù)據(jù)做示例數(shù)據(jù)

加載需要用到的包

library(ggplot2)
library(ggforce)
library(tidyverse)

讀取數(shù)據(jù)

df<-read.csv("Seed_Data.csv")
df$target<-paste0("cultivar",df$target)

主成分分析

df.pca<-prcomp(df[,1:7],scale. = T)

提取主成分分析的作圖數(shù)據(jù)

df.pca$x %>% as.data.frame() %>% 
  mutate(group=df$target) -> pca.result

計(jì)算PCA結(jié)果的平均值和標(biāo)準(zhǔn)差

pca.result %>% 
  group_by(group) %>% 
  summarise(pc1m=mean(PC1),
            pc1sd=sd(PC1),
            pc2m=mean(PC2),
            pc2sd=mean(PC2)) -> pca.result.a

初步的草圖

ggplot()+
  geom_errorbar(data=pca.result.a,
                aes(x=pc1m,
                    ymin=pc2m-1.96*pc2sd,
                    ymax=pc2m+1.96*pc2sd,
                    color=group),
                width=0.2)+
  geom_errorbarh(data = pca.result.a,
                 aes(y=pc2m,
                     xmin=pc1m-1.96*pc1sd,
                     xmax=pc1m+1.96*pc1sd,
                     color=group))+
  stat_ellipse(data=pca.result,
               geom="polygon",
               aes(x=PC1,
                   y=PC2,
                   color=group,
                   fill=group),
               alpha=0.2) -> p
p
image.png

從圖中提取作圖數(shù)據(jù)

ggplot_build(p)$data[[1]] %>% 
  select(colour,x,ymin,ymax) %>% 
  pivot_longer(cols = c(ymin,ymax)) %>% 
  rename("group"="colour",
         "x" ="x",
         "y"="value") %>% 
  select(x,y,group) -> tmp.1

ggplot_build(p)$data[[2]] %>% 
  select(colour,y,xmin,xmax) %>% 
  pivot_longer(cols = c(xmin,xmax))%>% 
  rename("group"="colour",
         "y" ="y",
         "x"="value") %>% 
  select(x,y,group) -> tmp.2

tmp<-rbind(tmp.1,tmp.2)

最終作圖

ggplot()+
  geom_mark_ellipse(data=tmp,
                    aes(x=x,y=y,
                        fill=group),
                    expand = unit(0,"mm"),
                    color="white")+
  geom_errorbar(data=pca.result.a,
                aes(x=pc1m,
                    ymin=pc2m-1.96*pc2sd,
                    ymax=pc2m+1.96*pc2sd),
                width=0.2)+
  geom_errorbarh(data = pca.result.a,
                 aes(y=pc2m,
                     xmin=pc1m-1.96*pc1sd,
                     xmax=pc1m+1.96*pc1sd))+
  theme_bw()+
  labs(x="PC1 (42.8%)",y="PC2(37.9%)")+
  geom_point(data=pca.result.a,
             aes(x=pc1m,y=pc2m),
             size=3)
image.png

歡迎大家關(guān)注我的公眾號(hào)

小明的數(shù)據(jù)分析筆記本

小明的數(shù)據(jù)分析筆記本 公眾號(hào) 主要分享:1、R語言和python做數(shù)據(jù)分析和數(shù)據(jù)可視化的簡(jiǎn)單小例子;2、園藝植物相關(guān)轉(zhuǎn)錄組學(xué)、基因組學(xué)、群體遺傳學(xué)文獻(xiàn)閱讀筆記;3、生物信息學(xué)入門學(xué)習(xí)資料及自己的學(xué)習(xí)筆記!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容