ggplot2绘制图收录
, 08 Mar 2020
文章包含一些我绘制过的ggplot2图一些美化方法。
ggplot2修改绘图字体
使用extrafont包,
library(extrafont)
loadfonts(device = "win")
这样你就能使用windowsFonts()函数看到的字体
对于英文字体,我一直选用family = “serif”,完全能应对大部分图形字体。
当然,extrafont包支持把所有字体导入到extrafontdb包中。
font_import() #导入字体库
fonts() #查看导入的字体向量
ggplot2的theme函数能用来修改字体family、face、size等text标签参数,或者说是字体属性。
下图是我绘制散点图的一个函数,可以重点关注theme。
plotfun <- function(df,x,y){
#x,y为列名字符串,df参数为tibble
p <- ggplot(df,aes(get(x),get(y))) + geom_point(size = 1) +
labs(title = "Point Plot",x=x,y=y)+
theme(text=element_text(family="serif"),
axis.title=element_text(size=14,hjust = 0.5,face = "bold"),
plot.title = element_text(hjust = 0.5,size = 20 , face = "bold"),
legend.text = element_text(hjust = 0.5,size = 12 , face = "bold"),
legend.text.align = 0 ,
legend.title = element_text(hjust = 0.5,size = 12 , face = "bold"),
axis.line = element_line(linetype = 1),
panel.grid.major = element_blank())
p1 <- p + geom_smooth(method="lm",se=F) #添加lm线性回归直线
return(p1)
}
拼接图形
使用包patchwork
library(patchwork)
对于上面那个函数,可以使用mapply循环绘制ggplot2对象列表,但是函数需要修改下,似乎不接受作为参数传入,把函数数据框参数去掉,往函数添加形似mtcars的数据框。
plist <- mapply(plotfun,x = colnames(mtcars)[3],y = colnames(mtcars)[4:7],SIMPLIFY = F)
#对列表拼接
patch <- wrap_plots(plist,nrow = 2,guides = "collect")
拼图也可以绘制为分面图
使用gather函数对形式mtcars数据变形。这里就不放入真实数据了,虽说使用mtcars运行我的代码图毫无意义。
比如去mtcas的mpg列与其他列绘制散点图
ga <- mtcars %>% gather(name1,value1,-mpg) %>%
gather(name2,value2,mpg)%>%
ggplot(aes(value1,value2)) + geom_point(size = 1) +
labs(title = "Point Plot",x="name2",y="")+
facet_wrap(~name1,strip.position = "left")
保存高清的png
我喜欢使用png去保存图片,当然更清晰的是tiff等
png(file="xx.png",width = 10000,height = 4500,res = 600)
p
dev.off()
这是我经常使用的保存图片方式。
plotly包
这个包可以绘制交互式点图,但是对于上述拼接的图不能支持,所以我才会去绘制分面图,方便看数据。
这个图使用很简单,使用ggplotly(p)即可在Rstudio导出一个网页图,p为ggplot绘制。
当然,这个包有其他函数,只是基本没用过。
2000*2000的corr相关性图
使用ggcor包
library(tidyverse)
library(ggcor)
x <- matrix(rnorm(100*2000),nrow = 100)
#cor相关性值还未计算
#直接绘制相关性图,由于2000个过多
plot <- quickcor(x) +geom_raster + remove_axis()
#或者计算好后传入ggcor
cortbl <- cor(x)%>%cor_tbl(type = "upper")
#corr值颜色
cortbl$a <- ifelse(cortbl$r>0,"red",ifelse(cortbl$r < 0 ,
"green","white"))
#绘制及保存
p <- ggcor(cortbl, mapping = aes_string(x = ".col.id", y = ".row.id")) +
geom_tile(mapping = aes(fill = a))+
scale_fill_manual(name = "color",values = levels(factor(cortbl$a)),
labels = c("green:corr<0",
"red:corr>0",
"white:corr =0")) + remove_axis()
pdf("ggcor.pdf")
print(p)
dev.off()