R語言與醫學統計圖形-【27】ggplot2圖形組合、字體、保存


ggplot2繪圖系統——圖形組合、字體選擇、保存輸出

1.圖形組合

一頁多圖在基礎包中利用par和layout函數來切分畫布。

ggplot2是先鋪好網格背景,再進行繪圖,所以要通過切分網格背景來實現一頁多圖。

gridExtra包(grid擴展包)可用於圖形排列組合、表格對象排列組合、規則多邊形及橢圓的排列組合。

library(grid)
#在畫布上畫8圖(列表)
gs <- lapply(1:8, function(i)grobTree(rectGrob(gp=gpar(fill=i,alpha=0.5)),textGrob(i)))
#按一定順序均分畫布
grid.arrange(grobs=gs,
             ncol=4,
             top='top label',
             bottom='bottom\nlabel',
             left='left label',
             right='right label')

#自由切分畫布(layout_matrix參數)
layout <- rbind(c(1,1,1,2,3),
                c(1,1,1,4,5),
                c(6,7,7,8,8))
grid.arrange(grobs=gs,layout_matrix=layout) #按矩陣切分

image.png

#使用長寬比來排列組合
grid.arrange(grobs=gs[1:3],ncol=2,widths=1:2,#定義寬度比
             heights=unit(c(1,10),c('in','mm')),#定義高度(絕對值)
             top='arrange with proportion')

image.png

2. 圖形字體選擇及中文繪制

針對windows系統的字體(windows/Fonts路徑下),windowsFont和windowsFonts函數。

#從windows字體庫中提取字體並命名
windowsFonts(font1=windowsFont('Book Antiqua'),
             font2=windowsFont('Cambria'),
             font3=windowsFont('華文中宋'),
             font4=windowsFont('楷體'))
plot(1:10)
text(1.5,2,labels = 'Hello',family='font1',cex=2)
text(3,4,labels = 'World',family='font2',cex=2)
text(5,6,labels = '你好',family='font3',cex=2)
text(8,9,labels = '世界',family='font4',cex=2)

#很多英文字體對中文不起作用

image.png
ggplot2繪圖系統一樣。

MAC系統

#顯示中文
Sys.setlocale(category = 'LC CTYPE',locale = 'zh_CN.UTF-8')

#字體選擇
plot(1:10)
text(1.5,2,labels = 'Hello',family='Times New Roman',cex=2)
text(5,6,labels = '你好',family='楷體',cex=2)

中文不顯示問題:
如果在Rstudio中字體編碼改成UTF-8后,繪制的圖形的中文還是被方框替代,則在theme函數中設置中文字體即可。

ggplot(mtcars,aes(wt,mpg))+
  geom_point(color='red')+
  ggtitle('這是一幅含有中文的散點圖')+
  theme(plot.title = element_text(size = 18,
                                  family = 'STKaiti')) #或楷體

3. 圖形保存和輸出

雜志一般要求:
位圖分辨率不少於300dpi,或矢量圖(pdf/eps)或tiff格式。
tiff函數及參數:

tiff(
  filename = 'test.tiff',
  width = 480,
  height = 480,
  units = 'px', #可改為cm
  pointsize = 12,
  compression = , #圖片壓縮形式,一般不設
  bg='white',
  res = , #分辨率,ppi
  type = c('cairo','windows') #圖形導出類型
)

示例。

tiff('/my/path/plot.tiff',
     width = 1200,
     height = 1300.
     res=300)
ggplot(mtcars,aes(mpg,y=wt,color=factor(gear)))+
  geom_point()
dev.off() #關閉作圖窗口

ggsave函數

ggplot(mtcars,aes(mpg,wt))+geom_point()
ggsave('test.pdf')
#dpi默認300,無需dev.off關閉繪圖框

Cairo擴展包
流行的開源2D圖形渲染引擎,支持各種輸出設備。輸出高清圖片將圖片放大也不失真。

Cairo和基礎包grDevices中的函數對應。

  • CairoPNG---grDevices:png()。
  • CairoTIFF---grDevices:tiff()。
  • CairoPDF---grDevices:pdf()。

加載包后,ggsave默認以Cairo處理圖片。

library(Cairo)
Cairo.capabilities() #支持的圖片格式

p = ggplot(iris,aes(x = Species,y = Sepal.Length,colour = Species))
plot1 = p+geom_point()
#ggsave默認以Cairo處理圖片
ggsave("test1.png",plot1,width = 4,height = 3 )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM