R語言繪圖基礎(chǔ)篇-PCA加置信圈

此文內(nèi)容首發(fā)于微信公眾號:R語言搬運工倒得,關(guān)注公眾號瀏覽更多精彩內(nèi)容

**原文鏈接

image.png

在科研論文中,經(jīng)掣嫠剑看到有繪圖后根據(jù)分組再點圖外圍加一個圓圈或者多邊形,這樣的圖怎樣實現(xiàn)呢承桥?

如下圖:


image.png

圖片源自文獻(xiàn)Identifying sagittal otoliths of Mediterranean Sea gobies:variability among phylogenetic lineages


image.png

圖片源自O(shè)tolith shape analysis as a tool to infer the population structure of the blue jack mackerel, Trachurus picturatus, in the NE Atlantic
上兩圖主要用到了CAP和CVA分析得到的樣點空間分布圖驻粟,根據(jù)點的分布模式,使用分組變量將不同分組的點分別使用圓圈和多邊形進(jìn)行frame凶异。其實有多種方法實現(xiàn)這種圖的繪制蜀撑。
image.png

剛開始小編在繪制主成分分析(PCA)散點圖的時候嘗試過使用繪圖軟件,比如illustrator剩彬、PS手動畫過酷麦,然而后邊發(fā)現(xiàn)這個圈圈是有統(tǒng)計意義的,不是隨隨便便畫幾個圈圈就能解決問題喉恋,所以建議不要手動畫沃饶。那么我們直接方法2吧!


image.png

image.png

這里使用常用的鳶尾花數(shù)據(jù)作為示例(這個數(shù)據(jù)余熱好燙)


library(ggplot2)
iris_pca <- princomp(formula = ~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
                     data = iris)
# 添加橢圓
ggplot(iris_pca$scores, aes(x = Comp.1, y = Comp.2,color=iris$Species)) +
  geom_point() +
  stat_ellipse(level = 0.9)

○ level:置信區(qū)間水平


image.png

根據(jù)0.9的置信區(qū)間水平添加的點圈轻黑,可以根據(jù)自己的需求調(diào)節(jié)置信水平糊肤,將盡量多的點囊括進(jìn)來


image.png

上圖是設(shè)置了置信區(qū)間水平0.99
是不是比較簡單,當(dāng)然還有其他點圈形式氓鄙,在不同的科研論文中均有所使用馆揉,這里簡單介紹幾種:

df<-iris
colnames(df)<-paste0(
  "V"
  ,1:5)
library(ggplot2)
library(ggforce)
ggplot(data=df,aes(x=V1,y=V2,color=V5))+
  geom_point()+
  geom_mark_rect(aes(fill=V5),alpha=0.1)+
  theme_bw()
image.png

image.png

在包ggalt中封裝了實現(xiàn)根據(jù)點分布形狀繪制點圈的函數(shù),可視化效果更好抖拦,這里簡單介紹一下升酣。

library(ggalt)

princomp(formula = ~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
         data = iris) %>%
  fortify() %>%
  add_column(FactorSpecies = factor(iris$Species)) %>%
  ggplot(aes(x = Comp.1, y = Comp.2, color = FactorSpecies)) +
  geom_point() +
  scale_x_continuous(limits=c(-5,5))+
  scale_y_continuous(limits=c(-2,2))+
  geom_encircle(aes(group = FactorSpecies),expand=0.1,spread=0.5,s_shape=0.9)

對代碼中重要參數(shù)做簡單的介紹:

                  ○  expand:圈的外部擴(kuò)展

                          ○  spread: 延申程度

                          ○  s_shape:線條平滑程度
image.png

當(dāng)然舷暮,有時候我們更希望是將不同分組的邊界點連起來圍成一個多邊形,這也在R中實現(xiàn)噩茄。


image.png

將代碼中的參數(shù)expand設(shè)置為0即可實現(xiàn):

library(ggalt)

princomp(formula = ~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
         data = iris) %>%
  fortify() %>%
  add_column(FactorSpecies = factor(iris$Species)) %>%
  ggplot(aes(x = Comp.1, y = Comp.2, color = FactorSpecies)) +
  geom_point() +
  geom_encircle(aes(group = FactorSpecies),expand=0,spread=0.5,s_shape=0.9)

image.png

還可以根據(jù)點坐標(biāo)將邊界點提取出來下面,然后使用geom_polygon函數(shù)添加邊界

iris_pca <- princomp(formula = ~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
                     data = iris)
iris_scores <- cbind(as.data.frame(iris_pca$scores[,1:2]),iris$Species)

time.a <- iris_scores[iris_scores$`iris$Species` == "setosa",][chull(iris_scores[iris_scores$`iris$Species` == "setosa", c("Comp.1", "Comp.2")]),] # hull values for time A
time.b <- iris_scores[iris_scores$`iris$Species` == "versicolor",][chull(iris_scores[iris_scores$`iris$Species` == "versicolor", c("Comp.1", "Comp.2")]),] # hull values for time A
time.c <- iris_scores[iris_scores$`iris$Species` == "virginica",][chull(iris_scores[iris_scores$`iris$Species` == "virginica", c("Comp.1", "Comp.2")]),] # hull values for time A
hull.data.time <- rbind(time.a, time.b,time.c) #combine grp.a and grp.b
ggplot()+
  geom_polygon(data=hull.data.time,aes(x=Comp.1,y=Comp.2,color=`iris$Species`),linetype="dashed",alpha=0.2) + # add the convex hulls
  geom_point(data=iris_scores,aes(x=Comp.1,y=Comp.2,shape=`iris$Species`,color=`iris$Species`),size=4) + # add the point markers
  scale_fill_manual(values=c("white","white","white"))
image.png

寫在文末

以上是此文分享全部內(nèi)容,喜歡點點關(guān)注吧巢墅!

此文內(nèi)容首發(fā)于微信公眾號:R語言搬運工诸狭,關(guān)注公眾號瀏覽更多精彩內(nèi)容

精彩推薦:

R語言繪制散點圖geom_point
R語言添加擬合曲線geom_smooth
R語言箱線圖boxplot
R語言線圖geom_line

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市君纫,隨后出現(xiàn)的幾起案子驯遇,更是在濱河造成了極大的恐慌,老刑警劉巖蓄髓,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉庐,死亡現(xiàn)場離奇詭異,居然都是意外死亡会喝,警方通過查閱死者的電腦和手機(jī)陡叠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肢执,“玉大人枉阵,你說我怎么就攤上這事≡で眩” “怎么了兴溜?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耻陕。 經(jīng)常有香客問我拙徽,道長,這世上最難降的妖魔是什么诗宣? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任膘怕,我火速辦了婚禮,結(jié)果婚禮上召庞,老公的妹妹穿的比我還像新娘岛心。我一直安慰自己,他們只是感情好篮灼,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布鹉梨。 她就那樣靜靜地躺著,像睡著了一般穿稳。 火紅的嫁衣襯著肌膚如雪存皂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音旦袋,去河邊找鬼骤菠。 笑死,一個胖子當(dāng)著我的面吹牛疤孕,可吹牛的內(nèi)容都是我干的商乎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祭阀,長吁一口氣:“原來是場噩夢啊……” “哼鹉戚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起专控,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抹凳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伦腐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赢底,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年柏蘑,在試婚紗的時候發(fā)現(xiàn)自己被綠了幸冻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡咳焚,死狀恐怖洽损,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情革半,我是刑警寧澤碑定,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站督惰,受9級特大地震影響不傅,放射性物質(zhì)發(fā)生泄漏旅掂。R本人自食惡果不足惜赏胚,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望商虐。 院中可真熱鬧觉阅,春花似錦、人聲如沸秘车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叮趴。三九已至割笙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伤溉。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工般码, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乱顾。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓板祝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親走净。 傳聞我的和親對象是個殘疾皇子券时,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容