R語(yǔ)言_圖片排版

20210830

iris數(shù)據(jù)

data(iris)
head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

以下幾個(gè)函數(shù)可以實(shí)現(xiàn)圖片排版,各有特色

1)facet_grid()

#  這個(gè)比較簡(jiǎn)單,不再贅述
ggplot(iris, aes(Petal.Width, Sepal.Length))+
  geom_point(size = 4)+
  facet_grid(~Species)

Note: 不知是否注意到x軸卓舵,3個(gè)分面的坐標(biāo)軸區(qū)間一致励幼,然后各個(gè)plot有很大留白,目前還不知道這里怎么解決(ps:對(duì)于強(qiáng)迫癥來(lái)說(shuō)菊碟,這個(gè)不能忍)


Fig 1

2)layout()

# matrix定義3個(gè)圖片位置, 2*2網(wǎng)格在刺,第一列一分為二(上下各一)
layout.show(3)
layout(matrix(c(1,2,3,3),2,2,byrow=FALSE),widths=c(1,1),height=c(1,1))
plot(iris$Sepal.Length, iris$Sepal.Width, pch = 19, cex=0.8, cex.axis=0.8, cex.lab=1.2)
plot(iris$Sepal.Length, iris$Petal.Length, pch = 19, cex=0.8, cex.axis=0.8, cex.lab=1.2)
plot(iris$Sepal.Length, iris$Petal.Width, pch = 19, cex=0.8, cex.axis=0.8, cex.lab=1.2)
dev.off()

Note:layout函數(shù)只能組合R內(nèi)置函數(shù)所出的圖逆害,ggplot出圖不能用此函數(shù)排版


Fig 2

3)pushViewport

pushViewport(viewport(layout = grid.layout(2, 2)))
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
print(p1, vp = vplayout(1, 1))
print(p2, vp = vplayout(1, 2))
print(p3, vp = vplayout(2, 1))
print(p4, vp = vplayout(2, 2))

Note: 坐標(biāo)軸未對(duì)齊,無(wú)標(biāo)簽


Fig 3

4)grid.arrange

# library(grid)
# library(gridExtra)
p1 = ggplot(iris, aes(Petal.Width, Sepal.Length))+geom_point(size = 4)
p2 = ggplot(iris, aes(Petal.Width, Sepal.Width))+geom_point(size = 4)
p3 = ggplot(iris, aes(Petal.Length, Sepal.Width))+geom_point(size = 4)
p4 = ggplot(iris, aes(Petal.Length, Petal.Width))+geom_point(size = 4)

lay <- rbind(c(1,2),
             c(3,4))         # 排版同上
grid.arrange(p1, p2, p3, p4, layout_matrix = lay)

Note: 僅邊框?qū)R蚣驼,而坐標(biāo)軸未對(duì)齊(第一列Y軸錯(cuò)開(kāi))魄幕,并且上述函數(shù)貌似不能添加標(biāo)簽(a, b, c....)


Fig 4

5)ggarrange()

# library(ggpubr)
ggarrange(p1, p2, p3, p4,  
          ncol=2,
          nrow=2,
          labels=LETTERS[1:4])

# 通過(guò)參數(shù) common.legend = TRUE 設(shè)置共同圖例

Note: 可加標(biāo)簽,坐標(biāo)軸未對(duì)齊


Fig 5

6)plot_grid()

# library(cowplot)
plot_grid(p1,p2,p2,p4,
          ncol = 2, labels=c("a","b","c","d"),
          axis = c( "tblr"), align = "hv") 

Note: 可加標(biāo)簽颖杏,可對(duì)齊梅垄,nice。就是common legend比較麻煩


Fig 6

圖例添加输玷,參考簡(jiǎn)書 [名本無(wú)名] 文章
“R 數(shù)據(jù)可視化 —— 圖形排列之 cowplot”

# 提取圖例
legend <- get_legend(
  plot[[1]] + guides(color = guide_legend(nrow = 1)) +
    theme(legend.position="bottom",
          legend.key.size = unit(20, "pt"),
          legend.text = element_text(size = 10)
    )
  
)

# 將圖例作為第i個(gè)圖片(即第9個(gè))队丝,然后設(shè)置其高度比例0.1
# 導(dǎo)出pdf,用AI調(diào)整其位置居中
plot_grid(plot[[1]],plot[[2]],plot[[3]],plot[[4]],
          plot[[5]],plot[[6]],plot[[7]],plot[[8]],
          legend, rel_heights = c(1, 1, 1, 1, 0.1),
          ncol = 2, labels=c("a","b","c","d","e","f","g","h"),
          axis = c( "tblr"), align = "hv") 
Fig 7

上述各個(gè)函數(shù)欲鹏,只有plot_grid提供了坐標(biāo)軸對(duì)齊机久,但是common legend的添加也是比較麻煩;而ggarrange的label赔嚎, legend 設(shè)置比較方便膘盖,但是y軸區(qū)間不一致,坐標(biāo)軸就很難對(duì)齊; 其余函數(shù)對(duì)label都不支持尤误。侠畔。。

Refs:
http://www.reibang.com/p/8bd1808c8ce7
https://zhuanlan.zhihu.com/p/161401082

更新 20210831

分面坐標(biāo)軸區(qū)間處理

# 設(shè)置scales 參數(shù)
# ref https://blog.csdn.net/weixin_39950867/article/details/109920012
facet_grid(var1 ~ var2, scales = "free_x")

更新 20210912

今天偶然發(fā)現(xiàn) ggarrange()函數(shù)下有一個(gè) align參數(shù)损晤,查了幫助文章软棺,也是對(duì)齊坐標(biāo)軸的
Nice !!!!

ps:要多看幫助文檔啊S妊喘落!

#align  
# (optional) Specifies whether graphs in the grid should be horizontally ("h") or vertically ("v") aligned. 
# Options are "none" (default), "hv" (align in both directions), "h", and "v".

ggpubr::ggarrange(a, b, ncol = 1, nrow = 2, labels = letters[1:2], common.legend = TRUE,
                  legend = "bottom", align = "hv")

更新 20221212

一直頭疼plot_layout函數(shù)的圖例問(wèn)題茵宪,無(wú)論在top/bottom/right/left,圖例都會(huì)影響你設(shè)定好的排版比例瘦棋,今天偶然發(fā)現(xiàn)稀火,plot_layout可以在一側(cè)放置所有的圖例,這個(gè)就比較方便了赌朋。感謝簡(jiǎn)書“迷途小書童”凰狞,下面ref是其簡(jiǎn)書blog地址。做個(gè)一個(gè)案例圖沛慢,作為大家參考

plot_layout(guides = 'collect')
ref:http://www.reibang.com/p/73057774b4cb
a recent case

更新20230722

今天作圖赡若,突然覺(jué)得每個(gè)分面大小都是一樣的,但是每個(gè)分面的元素個(gè)數(shù)不一樣颠焦。這樣看著很別扭(如下圖)


fixed facet.jpg

仔細(xì)查閱了“facet_grid”的各個(gè)參數(shù),發(fā)現(xiàn)一個(gè)“space”的參數(shù)往枣,R幫助文件這樣解釋伐庭,

If "fixed", the default, all panels have the same size. If "free_y" their height will be proportional to the length of the y scale; if "free_x" their width will be proportional to the length of the x scale; or if "free" both height and width will vary. This setting has no effect unless the appropriate scales also vary.

完美解決facet分面的比例問(wèn)題。

  facet_grid(tp~.,scales = "free_y", space ="free_y")
scaled facet
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末分冈,一起剝皮案震驚了整個(gè)濱河市圾另,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雕沉,老刑警劉巖集乔,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坡椒,居然都是意外死亡扰路,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門倔叼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汗唱,“玉大人,你說(shuō)我怎么就攤上這事丈攒×ㄗ铮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵巡验,是天一觀的道長(zhǎng)际插。 經(jīng)常有香客問(wèn)我,道長(zhǎng)显设,這世上最難降的妖魔是什么框弛? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮捕捂,結(jié)果婚禮上功咒,老公的妹妹穿的比我還像新娘愉阎。我一直安慰自己,他們只是感情好力奋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布榜旦。 她就那樣靜靜地躺著,像睡著了一般景殷。 火紅的嫁衣襯著肌膚如雪溅呢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天猿挚,我揣著相機(jī)與錄音咐旧,去河邊找鬼。 笑死绩蜻,一個(gè)胖子當(dāng)著我的面吹牛铣墨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播办绝,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伊约,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了孕蝉?” 一聲冷哼從身側(cè)響起屡律,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎降淮,沒(méi)想到半個(gè)月后超埋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佳鳖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年霍殴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系吩。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡繁成,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淑玫,到底是詐尸還是另有隱情巾腕,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布絮蒿,位于F島的核電站尊搬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏土涝。R本人自食惡果不足惜佛寿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冀泻,春花似錦常侣、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肢专,卻和暖如春舞肆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背博杖。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工椿胯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剃根。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓哩盲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狈醉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子廉油,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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