填坑-2017年的主题调整专题(基础版):大匠致巧,随R所图


title: “大匠致巧,随R所图”author: “wentao”date: “2020/12/23”output: html_documenteditor_options:

大匠致巧,随R所图 (基础版)

写在前面

早在17年,我就说过要写一篇设置主题的贴子,让我们可以更好的使用R语言绘图系统,当然主要是ggplot主题。从主题到颜色,到形状都包含在这篇推文中。但是最近的工作,让我将保存也包含到了这篇推文中,尤其是按照paper进行保存图片。只是这还没有达到完整解决图片使用的问题,高级版本还在制作中。

安装github R包方式

##如果没有这个包,安装起来还是挺麻烦的
# if (!requireNamespace("devtools", quietly = TRUE))
# install.packages("devtools")
#
# devtools::install_github("calligross/ggthemeassist")

0 用于演示的例图

#--主题修改--颜色修改
library(ggplot2)
head(iris)
iris$Species
p1 <- ggplot(iris) + geom_point(aes(x = Sepal.Length, y = Petal.Length,fill = Species,color = Species),pch = 21)

p1

1 使用R包中各种主题

1.1 ggplot内含主题

# 默认灰色主题
p2_1 <- p1+theme_gray() # 默认
# 白色主题
p2_2 <- p1+theme_bw()
#--实线网格
p2_3 <- p1+theme_linedraw()
#
p2_4 <- p1+theme_light()
#-黑色背景往往不会使用
p2_5 <- p1+theme_dark()
# 无边框
p2_6 <- p1+theme_minimal()
#--origin类似两边框
p2_7 <- p1+theme_classic()#这个包简洁好看
# 无边框
p2_8 <- p1+theme_void()#横纵坐标群去掉

library(patchwork)

(p2_1 + p2_2 + p2_3 + p2_4)/( p2_5 + p2_6 + p2_7 + p2_8)

1.2 themes包中的主题

library(ggthemes)

p1 + theme_base() # 多添加外边框 **
p1 + theme_fivethirtyeight() # 类似excel的主题
p1 + theme_solarized()# 类似excel的主题
p1 + theme_gdocs() # 类似excel的主题
p1 + theme_stata() # 类似excel的主题
p1 + theme_few() # 四周边框,网格去除 ***
p1 + theme_wsj() # 类似excel的主题
p1 + theme_economist()# 类似excel的主题
p1 + theme_pander() # 类似excel的主题
p1 + theme_excel() # 类似excel的主题
p1 + theme_tufte() # 去坐标轴
p1 + theme_calc() # 加边框
p1 + theme_par() # 格子去除,外边框保留 ***
p1 + theme_hc() # 类似excel的主题

1.3 ggthemr 主题 不太适合科研图表的绘制,所以这里不采用

但是其修改全局图形样式方式,值得借鉴为科研所使用。

# library(devtools)
# devtools::install_github('cttobin/ggthemr')

# library(ggthemr)
# ggthemr_reset()#清除现有主题
# ggthemr('dust')
# p1
# ggthemr('flat')
# p1
# ggthemr('pale')
# p1
# ggthemr('fresh')
# p1
# ggthemr('flat dark')
# p1
# ggthemr('light')
# p1
# ggthemr('earth')
# p1
# ggthemr('sea')
# p1

1.4 ggtech 和 ggsci

##接下来我们使用ggtech包来试试#具体学习参照网址:https://github.com/ricardo-bion/ggtech############
# devtools::install_github("ricardo-bion/ggtech", dependencies=TRUE)
library(ggtech)
p1 + theme_tech(theme="airbnb") +scale_color_tech(theme="airbnb") + scale_fill_tech(theme="airbnb")
p1 + theme_tech(theme="etsy") + scale_color_tech(theme="etsy")
# 具体学习参照网址:https://github.com/ricardo-bion/ggtech############

######接下来我们使用ggsci包来试试################
library(ggsci)
#ggsci打包了Nature Publishing Group,American Association for the Advancement of Science,Lancet journals等期刊的图片配色
##使用此包中的配色#
p1 +scale_color_nejm()
p1 + scale_color_lancet()

全局主题设置:

  • https://ggplot2.tidyverse.org/reference/theme_get.html

详细的全局设置参考ggopt:

  • https://rdrr.io/github/hadley/ggplot1/man/ggopt.html

1.5 全方位了解主题组成

#现在我们一步一步将全部可变修改参数进行一个整理修改:#为了设计主题,我们还需要知道的知识:#linetype的类型有哪些:0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash
mytheme<-theme(

#########################首先是绘图区域的整体参数:
#先拿网格线开刀,对全部网格线控制
panel.grid.major=element_line(colour = "red"),
panel.grid.minor=element_line(colour = "red",linetype = "dashed",size = 0.2),
panel.grid.major.x=element_line(colour = "red"),
panel.grid.minor.x=element_line(colour = "red"),
panel.grid.major.y=element_line(colour = "red"),
panel.grid.minor.y=element_line(colour = "red"),
#整个图片背景
plot.background=element_rect(color="blue",fill="grey60"),
#其次是绘图区域的背景:panel.background = element_rect(fill = "blue"),
#在这绘图区域边框
panel.border = element_rect(colour = "white",fill = NA,size = 2),
#########################首先是绘图区域的整体参数:

#########################设置坐标轴线和刻度线
#axis.line.x = NULL,#移除坐标轴线x
#axis.line.y = NULL,#移除坐标轴线y
axis.line = element_line(color="black", size = 5),
#下面是坐标轴刻度线外观如果想去掉坐标轴线,axis.ticks=element_blank()
#axis.ticks=element_blank(),#移除两个坐标轴刻度线
axis.ticks.x = element_line(colour = "red",size = 5),
axis.ticks.y = element_line(colour = "red",size = 2),#控制刻度标签而不是坐标轴线
#########################设置坐标轴线和刻度线

#####################对文本进行控制
#首先是标题:plot.title = element_text(family="myFont",colour = "black",size = 20,face = "bold"),#
#坐标轴文本只坐标轴标题
axis.title.x =element_text(colour = "red",size = 14),
axis.title.y =element_text(colour = "yellow",size = 14),
#坐标轴标签文本
#axis.text.x=element_blank(),#
axis.text.x = element_text(colour = "red",size = 14),
axis.text.y = element_text(colour = "red",size = 14),
#接下来就是图例部分了
#首先是图例背景
legend.background = element_rect(fill = "#FF7F00",colour = "red",size=1),
#其次是图例文本
#图例标题
legend.title = element_text(colour = "blue",face = "bold",size = 14),
#图例项文本
legend.text = element_text(colour = "red"),
#图例符号
legend.key = element_rect(fill = "gray87",colour = "blue",size = 0.25)
#####################对文本进行控制
)

##在这些控制部分中我们主题可以控制每一个部分的外观和有无,但是有些部分是否在这个位置不属于主题设置的范畴
##通过控制一下四个参数达到控制图片外观的需求,所以了解一下四个参数详细信息会有很大帮助

1.6 交互式设置主题-用于交互式修改主题

但是这里学习一下每个参数的函数也是很好的,只是,我觉得,这些参数学习完成后,还是代码来的方便,快捷。

# install.packages("ggThemeAssist")
library(ggplot2)
library(ggThemeAssist)

# 开始调整主题
ggThemeAssistGadget(p1)

1.7 关于全局设定主题

# 设置全局主题样式
theme_set(theme_bw())

  • https://rstudio.github.io/thematic/

2 颜色设置

2.1 RColorBrewer中的配色方案

#############颜色库,调取颜色###############
library(RColorBrewer)#调色板调用包
#调用所有这个包中的调色板
display.brewer.all()
#提取特定个数的调色板颜色,会出图显示
display.brewer.pal(9,"Set1")
display.brewer.pal(10,"Dark2")
##仅仅只显示色号,我们要在颜色上并显示色号才好
brewer.pal(9,"YlGn")
#########这个包就来做这个功能#########
library(scales)
###提取主题包中的颜色
m1<-economist_pal()(9)#通过这条命令可以知道economist这个主题只有9种颜色
show_col(m1)
m2<-wsj_pal()(6)#
show_col(m2)

show_col(wsj_pal()(6))

2.2 如何修改配色方案

R包中的一些颜色直接使用,指定颜色调用

p1 + theme_economist()
p1 + theme_economist() + scale_color_economist()
p1 + theme_calc() + scale_color_calc()

##########如何使用颜色在图上#####################
#调用调色板调用包颜色
p1+scale_fill_brewer()
p1+scale_colour_brewer()
#使用灰度调色板
p1+scale_fill_grey()
p1+scale_colour_grey()
#色轮周围均匀等距色
p1+scale_fill_hue()
p1+scale_colour_hue()
p1+scale_colour_discrete()
p1+scale_fill_discrete()
####使用自定义
m3=brewer.pal(9,"YlGn")
m1<-economist_pal()(9)#通过这条命令可以知道economist这个主题只有9种颜色

show_col(m1)
m2<-wsj_pal()(6)#
show_col(m2)
######我们提取这些颜色为自己所用
m=c(m2,m1)
m
p1+scale_fill_manual(values=m)
p1+scale_colour_manual(values=m)

2.3 几种常见颜色

2.31离散的几种颜色

#根据需要的颜色将颜色号通过下面命令收集
mi=c("#E41A1C" ,"#377EB8", "#4DAF4A", "#984EA3", "#FF7F00" ,"#FFFF33", "#7c260b",
"#1B9E77", "#D95F02" ,"#7570B3" ,"#E7298A", "#66A61E", "#E6AB02",
"#8DD3C7", "#FFFFB3", "#BEBADA","#FB8072" ,"#80B1D3", "#FDB462", "#B3DE69",
"#FCCDE5","#D9D9D9", "#BC80BD")
show_col(mi)
#将颜色加上图上
p+scale_colour_manual(values = mi)
library(RColorBrewer)#调色板调用包
#调用所有这个包中的调色板
display.brewer.all()
#提取特定个数的调色板颜色,会出图显示
display.brewer.pal(9,"Set1")
colset1 <- brewer.pal(9,"Set1")[c(5,4)]
colset2 <- brewer.pal(12,"Paired")
colset3 <- c(brewer.pal(12,"Paired"),brewer.pal(9,"Pastel1"))

2.31 连续颜色

如果连续变量,尤其是热图等使用颜色-更加丰富的热图颜色梯度

scale_fill_gradientn用于设置连续填充。

# Justification controls where the cells are anchored
df <- expand.grid(x = 0:5, y = 0:5)
df$z <- runif(nrow(df))
# default is compatible with geom_tile()
p2 <- ggplot(df, aes(x, y, fill = z)) + geom_raster() + scale_fill_gradientn(colours =colorRampPalette(RColorBrewer::brewer.pal(11,"Spectral"))(60)) + mytheme1
p2

3 多种视觉感官联用区分

颜色和形状联合使用

p1 <- ggplot(iris) + geom_point(aes(x = Sepal.Length,
y = Petal.Length,
group = Species,
color = Species,
shape = Species
)
)

p1

有些时候分组下面有子分组,所以用形状区分大组,用颜色区分小组;

颜色的渐变可以让我们更加容易观察一组具有变化的数值,例如在时间尺度上的东西和空间尺度上的东西。

形状填充颜色不同,让我们很容易想到一组具有共同特征的东西,或者变量。

iris1 = iris
iris1$group = c("A","B","C")
head(iris1)

p1 <- ggplot(iris1) + geom_point(aes(x = Sepal.Length,
y = Petal.Length,
shape = Species,
fill = group
)
)

p1 + scale_fill_manual(values = c("red","blue","white")) + scale_shape_manual(values = c(21:23))

4 字体-win字体

#使用字体
windowsFonts(myFont = windowsFont("微软雅黑"))

###这种方式将所有字体调整为新罗马字体
windowsFonts(myFont = windowsFont("Times New Roman"))
p1 +theme_gray(base_size = 20, base_family = "myFont")

#########调整字体大小和汉字字体类型################
p1 + theme_gray(base_size = 20, base_family = "")#可以自己调整字体大小和字体类型

5 常用主题

5.1 常用主题1

library(RColorBrewer)#调色板调用包
geom.text.size = 15
theme.size = (8/5) * geom.text.size

library(ggthemes)
mytheme1 = theme_par() + theme(
panel.background=element_blank(),
panel.grid=element_blank(),
legend.position="right",

legend.title = element_blank(),
legend.background=element_blank(),
legend.key=element_blank(),
# legend.text= element_text(size=7),
# text=element_text(),
# axis.text.x=element_text(angle=45,vjust=1, hjust=1)
plot.title = element_text(size = theme.size,face = "plain",colour = "black",vjust = -8.5,hjust = 0.1),
axis.title.y =element_text(size = theme.size,face = "plain",colour = "black"),
axis.title.x =element_text(size = theme.size,face = "plain",colour = "black"),
axis.text = element_text(size = theme.size,face = "plain"),
axis.text.x = element_text(colour = "black",size = theme.size,angle = 45,vjust = 1,hjust = 1),
axis.text.y = element_text(colour = "black",size = theme.size),
legend.text = element_text(size = theme.size,face = "plain"),
strip.text.x = element_text(colour = "black",size = theme.size),
strip.text.y = element_text(colour = "black",size = theme.size),
strip.background = element_blank(),
plot.margin=unit(c(0,0,0,0), "cm")

)

mytheme2 = theme_void() + theme(
panel.background=element_blank(),
panel.grid=element_blank(),
legend.position="right",

legend.title = element_blank(),
legend.background=element_blank(),
legend.key=element_blank(),
# legend.text= element_text(size=7),
# text=element_text(),
# axis.text.x=element_text(angle=45,vjust=1, hjust=1)
plot.title = element_text(size = theme.size,face = "plain",colour = "black",vjust = -8.5,hjust = 0.1),
axis.title.y =element_text(size = theme.size,face = "plain",colour = "black"),
axis.title.x =element_text(size = theme.size,face = "plain",colour = "black"),
axis.text = element_text(size = theme.size,face = "plain"),
axis.text.x = element_text(colour = "black",size = theme.size,angle = 45,vjust = 1,hjust = 1),
axis.text.y = element_text(colour = "black",size = theme.size),
legend.text = element_text(size = theme.size,face = "plain"),
strip.text.x = element_text(colour = "black",size = theme.size),
strip.text.y = element_text(colour = "black",size = theme.size),
strip.background = element_blank()
)

# p1 + mytheme1

5.2 常用主题2

########这份主题来自刘永鑫老师自己的设计
mytheme2 = theme(panel.background=element_blank(),
panel.grid=element_blank(),
axis.line.x=element_line(size=.5, colour="black"),
axis.line.y=element_line(size=.5, colour="black"),
axis.ticks=element_line(color="black"),
axis.text=element_text(color="black", size=7),
legend.position="right",
legend.background=element_blank(),
legend.key=element_blank(),
legend.text= element_text(size=7),
text=element_text(family="sans", size=7))
p1 + mytheme2

5.3 新罗马字体主题-此时使用win字体

windowsFonts(myFont = windowsFont("Times New Roman"))
mytheme1 = theme_par(base_family = "myFont") + theme(
panel.background=element_blank(),
panel.grid=element_blank(),
legend.position="right",

legend.title = element_blank(),
legend.background=element_blank(),
legend.key=element_blank(),
# legend.text= element_text(size=7),
# text=element_text(),
# axis.text.x=element_text(angle=45,vjust=1, hjust=1)
plot.title = element_text(vjust = -8.5,hjust = 0.1),
axis.title.y =element_text(size = 24,face = "bold",colour = "black"),
axis.title.x =element_text(size = 24,face = "bold",colour = "black"),
axis.text = element_text(size = 20,face = "bold"),
axis.text.x = element_text(colour = "black",size = 14),
axis.text.y = element_text(colour = "black",size = 14),
legend.text = element_text(size = 15,face = "bold")
)

p1 + mytheme1

5.4 不需要坐标轴主题-热图等

mytheme2 = theme_void() + theme(
panel.background=element_blank(),
panel.grid=element_blank(),
legend.position="right",

legend.title = element_blank(),
legend.background=element_blank(),
legend.key=element_blank(),
# legend.text= element_text(size=7),
# text=element_text(),
# axis.text.x=element_text(angle=45,vjust=1, hjust=1)
plot.title = element_text(vjust = -8.5,hjust = 0.1),
axis.title.y =element_text(size = 24,face = "bold",colour = "black"),
axis.title.x =element_text(size = 24,face = "bold",colour = "black"),
axis.text = element_text(size = 20,face = "bold"),
axis.text.x = element_text(colour = "black",size = 14),
axis.text.y = element_text(colour = "black",size = 14),
legend.text = element_text(size = 15,face = "bold")
)

p2 + mytheme2

根际互作生物学研究室 简介

根际互作生物学研究室是沈其荣教授土壤微生物与有机肥团队下的一个关注于根际互作的研究小组。本小组由袁军副教授带领,主要关注:1.植物和微生物互作在抗病过程中的作用;2 环境微生物大数据整合研究;3 环境代谢组及其与微生物过程研究体系开发和应用。团队在过去三年中在 isme J, Microbiome, PCE,SBB,Horticulture Research等期刊上发表了多篇文章。欢迎关注 微生信生物 公众号对本研究小组进行了解。

团队工作及其成果 (点击查看)

了解 交流 合作

  • 团队成员邮箱 袁军:

    junyuan@njau.edu.cn;

    文涛:

    2018203048@njau.edu.cn

  • 团队公众号:

(0)

相关推荐