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) #按矩陣切分
#使用長寬比來排列組合
grid.arrange(grobs=gs[1:3],ncol=2,widths=1:2,#定義寬度比
heights=unit(c(1,10),c('in','mm')),#定義高度(絕對值)
top='arrange with proportion')
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)
#很多英文字體對中文不起作用
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 )