R-ggplot2 学术箱线图制作

2021-02-22 15:16:08 浏览数 (1)

01. 引言

之前有和群里的小伙伴讨论说"将之前Python-matplotlib 绘制的图用R-ggplot2重新绘制",也得到很多小伙伴的响应

。本期推文就推出箱线图(boxplot)的R-ggplot2 绘制方法,大家可以和 Python-matplotlib 箱线图绘制 这篇文章对比下。

02. R-ggplot2 绘制

(1)数据预览

由于数据和之前的数据一样,且ggplot2 对绘图数据也是有一定要求,现给出数据如下(部分):

其中Type 中主要含有 Teain sample 和 Test sample 两种。

(2)数据可视化

R-ggplot2 绘制箱线图很简单,主要为 geom_boxplot() ,先采用默认的参数绘制 ,代码如下:

代码语言:javascript复制
plot_pir <- ggplot(data = box_data,aes(x = Type,y = AOD_550nm)) 
     geom_boxplot(aes(fill=Type)) 
     labs(caption = "Visualization by DataCharm")
plot_pir

结果如下:

当然,你也可以更改 x、y,使其"横向"展示:

代码语言:javascript复制
plot_pir2 <- ggplot(data = box_data,aes(x = AOD_550nm,y = Type)) 
     geom_boxplot(aes(fill=Type)) 
     labs(caption = "Visualization by DataCharm")
plot_pir2

结果如下:

虽然默认的格式还不错,但想要符合学术图表要求,还是需要们进行定制化修改,如箱线图的宽、颜色、字体以及一些主题 颜色等,下面我们进行修改。代码如下:

代码语言:javascript复制
plot_pir2_ed <- ggplot(data = box_data,aes(x = AOD_550nm,y = Type)) 
     geom_boxplot(aes(fill=Type),width = 0.4) 
     labs(x ='Values',y=NULL,
          title = "The boxplot of Train data and Tset data",
          subtitle = "Boxplot R-ggplot2 Exercise",
          caption = 'Visualization by DataCharm') 
     #添加图序号(a)
     geom_text(x=2.4,y=2.3,label='(a)',size=8,family='Times_New_Roman',fontface='bold') 
     theme(text = element_text(family = 'Times_New_Roman'),
           axis.text = element_text(family = 'Times_New_Roman',size = 13,face = 'bold'),
           #去除图例标题
           legend.title = element_blank(),
           axis.ticks.length=unit(-0.25, "cm"), 
           #设置刻度label的边距
           axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), 
           axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm"))
           )
plot_pir2_ed

涉及到的都是简单的 绘图函数及绘图属性设置。大家可以直接阅读ggplot2的官网(https://ggplot2.tidyverse.org/reference/theme.html) 进行查看。上述代码结果如下:

ggplot2 自身带有多个优秀的 主题风格(theme),下面我们结合主题并设置自定义较利于出版的灰色系颜色,代码如下:

代码语言:javascript复制
plot  <- ggplot(data = box_data,aes(x = Type,y = AOD_550nm)) 
     geom_boxplot(aes(fill=Type),width = 0.4)  
     scale_fill_manual(values = c('grey40','grey80')) 
     #设置轴范围
     scale_y_continuous(limits = c(-.1,2.5),expand = c(0,0)) 
     labs(x =NULL,y=NULL,
          title = "The boxplot of Train data and Tset data",
          subtitle = "Boxplot R-ggplot2 Exercise",
          caption = 'Visualization by DataCharm') 
     #添加图序号(a)
     geom_text(x=2.4,y=2.3,label='(a)',size=8,family='Times_New_Roman',fontface='bold') 
     theme_linedraw() 
     theme(text = element_text(family = 'Times_New_Roman'),
           axis.text = element_text(family = 'Times_New_Roman',size = 13,face = 'bold'),
           panel.grid.major = element_line(colour = "gray50",linetype = 'dashed',size=.57), 
           panel.grid.minor = element_line(color = "white"),
           #去除图例标题
           legend.title = element_blank(),
           #加宽图边框
           panel.border = element_rect(size=1),
           #修改刻度线朝里
           axis.ticks.length=unit(-0.25, "cm"), 
           #设置刻度label的边距
           axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), 
           axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm"))
           )
plot

知识点:

(1)自定义颜色

代码语言:javascript复制
scale_fill_manual(values = c('grey40','grey80'))

(2)主题选择:theme_linedraw()

(3)theme()中进行定制化设置

代码语言:javascript复制
 theme(text = element_text(family = 'Times_New_Roman'),
           axis.text = element_text(family = 'Times_New_Roman',size = 13,face = 'bold'),
           panel.grid.major = element_line(colour = "gray50",linetype = 'dashed',size=.57), 
           panel.grid.minor = element_line(color = "white"),
           #去除图例标题
           legend.title = element_blank(),
           #加宽图边框
           panel.border = element_rect(size=1),
           #修改刻度线朝内
           axis.ticks.length=unit(-0.25, "cm"), 
           #设置刻度label的边距
           axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), 
           axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm"))
           )

结果如下:

或者如下:

使用 theme_classic() 主题,效果如下:

更多主题设置,大家可以查看官网哦

。(以自己经验来说,还是直接查官网 或者 Google)

03. 总结

R-ggplot2 绘制箱线图还是十分简单的,不仅拥有丰富 的图表元素设置函数、主题以及额外的第三方绘图包。当然,对绘图数据的要求也比较严格。大家觉得和Python 绘制 有什么不同呢?欢迎在文末 读者讨论 或 进群进行交流讨论

0 人点赞