日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

嵌套條形圖的R語言實(shí)現(xiàn)

 松哥精鼎統(tǒng)計(jì) 2020-10-23

    前期松哥推送一張美圖,并用Graphpad Prism進(jìn)行模擬。一位才女夏雪留言說用R語言模擬,并供稿如下,分享與大家一同學(xué)習(xí)!

多嵌套圖拼接的R語言實(shí)現(xiàn)

《這張圖好美,你知道怎么做的嗎?》ggplot2仿圖


這次基于ggplot2的嘗試主要源于松哥近期的一篇推送《這張圖好美,你知道怎么做的嗎?》,感慨于Graphpad Prism作圖的簡潔,也嘗試用ggplot2還原了這個(gè)嵌套圖,權(quán)當(dāng)對(duì)兩種軟件的繪圖模塊進(jìn)行一個(gè)比較,希望能給各位小伙伴提供一個(gè)不同的視角。

No.1

原文研究設(shè)計(jì)及圖片還原思路

首先來看一下文獻(xiàn)的原圖吧~

原圖

原文作者在對(duì)不同年齡(幼鼠和成年鼠),不同性別(雌/雄)進(jìn)行某種刺激后,在7個(gè)時(shí)間點(diǎn)(1為刺激前,6為最后1次刺激,7為刺激后一段時(shí)間)分別對(duì)3個(gè)效應(yīng)指標(biāo)進(jìn)行了測量。在進(jìn)行結(jié)果展示時(shí),作者放棄了常規(guī)的統(tǒng)計(jì)表格,選擇了上圖的形式,按照年齡,性別分為4層,每層3個(gè)子圖,分別反映3個(gè)不同的指標(biāo)

不難看出,原圖由12個(gè)嵌套圖組成,每個(gè)嵌套圖又由1個(gè)主圖和1個(gè)子圖拼接而成。其中,主圖采用散點(diǎn)誤差棒結(jié)合的形式展示了某效應(yīng)指標(biāo)在7個(gè)時(shí)間點(diǎn)的均值和標(biāo)準(zhǔn)誤,而每個(gè)時(shí)點(diǎn)與刺激前的差異顯著性則以“*”的形式進(jìn)行標(biāo)注;子圖則為柱狀圖誤差棒的結(jié)合,主要比較了最后一次刺激及刺激后與刺激前效應(yīng)指標(biāo)水平的差異,同樣也標(biāo)注了兩兩比較的差異顯著性,與主圖的區(qū)別是,這里選擇了以橫線對(duì)兩個(gè)比較時(shí)點(diǎn)進(jìn)行了標(biāo)注。

基于以上思路,小x利用R軟件的ggplot2包對(duì)原圖進(jìn)行了還原:

仿圖

簡單地說,除了外邊框(合理懷疑原圖的邊框是AI或者PS后期處理的)和坐標(biāo)軸沒有完全實(shí)現(xiàn)(x軸時(shí)間點(diǎn)6和7之間截?cái)嗍。┩猓渌€算是基本還原了。

No.2

嵌套圖實(shí)現(xiàn)

借助ggplot2ggsignif包,小x對(duì)嵌套圖A進(jìn)行了還原。兩個(gè)包的說明文檔可以參考:

https://cran./web/packages/ggplot2/index.html

https://github.com/const-ae/ggsignif

首先,生成模擬數(shù)據(jù)并加載所需的R包:

#加載R包

library(ggplot2) #繪圖

library(ggsignif) #顯著性繪制

#圖A模擬數(shù)據(jù)

group<-c(1,2,3,4,5,6,7) #分組

estimate<-c(15,8,7.5,6,7,5,12) #均值

lower<-c(14,7,6.5,5,6,4,11) #誤差限下限

upper<-c(16,9,8.5,7,8,6,13) #誤差限上限

a<-data.frame(group,estimate,lower,upper)

#圖A'模擬數(shù)據(jù)

b<-a[c(1,6,7),] 

b$group<-as.factor(b$group) #將時(shí)間點(diǎn)1,6,7處理為因子形式,以便在x軸上等距顯示各時(shí)間點(diǎn)效應(yīng)值。

自定義圖片的主題:

windowsFonts(

myFont = windowsFont("Arial Unicode MS")

#加載所需字體:Arial Unicode MS

mytheme<-theme(

axis.line=element_line(size=0.5,colour="black"), 

axis.title=element_text(family="myFont",colour="black", size=12),

axis.text=element_text(family="myFont",colour="black", size=12),

legend.background=element_blank(),

legend.key=element_blank(),

legend.title=element_blank(),

panel.background=element_blank(),

panel.border=element_blank(),

panel.grid=element_blank()

)  #設(shè)置圖片坐標(biāo)軸(axis),圖例(legend)及面板(panel)

利用散點(diǎn)圖(geom_point)和誤差棒(geom_errorbar)的疊加,繪制嵌套主圖p1,并手動(dòng)標(biāo)注(geom_text)顯著性水平:

p1<-ggplot(data=a,aes(x=group))+

#散點(diǎn)圖

geom_point(aes(y=estimate),size=4,colour=3)+

#誤差限

geom_errorbar(aes(ymin=lower,ymax=upper),width=0.2,size=0.8,colour=3)+

#設(shè)置坐標(biāo)軸

scale_y_continuous(breaks=c(0,5,10,15,20), limits=c(0,23))+

scale_x_continuous(breaks=c(1,2,3,4,5,6,7),limits=c(0.5,10.5))+

#標(biāo)注顯著性水平          

geom_text(aes(y=upper+0.5), label=c("","***","***","***","***","***",""),colour=1,size=5)+

#設(shè)置x軸,y軸及標(biāo)題

labs(x="Stimulation",y="DA concentration(uM)",title="A")+

 #設(shè)置主題 

mytheme

利用條形圖(geom_bar)和誤差棒(geom_errorbar)的疊加,繪制嵌套子圖p2,并借助ggsignif包(geom_signif)標(biāo)注組間差異顯著性:

p2<- ggplot(data=b,aes(x=group))+

#條形圖

geom_bar(aes(y=estimate),stat="identity",width=0.4,fill=3)+

#誤差限

geom_errorbar(aes(ymin=lower,ymax=upper),width=0.2,size=0.8,colour=3)+

#標(biāo)注顯著性水平    geom_signif(stat="identity",data=data.frame(x=c(1,2),  xend=c(2,3), y=c(16.5,13.5), annotation=c(" * ", " *** ")), aes(x=x,xend=xend, y=y, yend=y, annotation=annotation), size=5)+

#設(shè)置坐標(biāo)軸

scale_y_continuous(breaks=c(0,5,10,15,20),limits=c(0,20))+

#設(shè)置x軸,y軸及標(biāo)題

labs(x="",y="DA concentration(uM)",title="A'")

#設(shè)置主題

mytheme

利用生成ggplotGrob() 生成圖形對(duì)象列表(grob, graphical object)后,利用annotation_custom通過添加注釋的方式,向圖形內(nèi)部添加子圖:

g<-ggplotGrob(p2)

p01<-p1+ annotation_custom(

         g,xmin=7.5,xmax=10.5,ymin=12,ymax=25)

No.3

嵌套圖拼接

類似地,可以完成其余11幅嵌套圖(p02-p12)的繪制。

對(duì)于圖片的拼接,小x利用了gridExtra包實(shí)現(xiàn),說明文檔可以參考:

https://cran./web/packages/gridExtra/index.html

png(file = "C:/R/COPY.png", res =600, 

     width =10000, height =10000)

grid.arrange(p01,p02,p03,p04,p05,p06,p07,

     p08,p09,p010,p011,p012,ncol=3)

dev.off()

嗯,到目前為止,圖片就基本還原了。至于外邊框和標(biāo)注,各位小伙伴就借助AI和PS進(jìn)行美化吧。希望你們覺得有意思。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多