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 绘制 有什么不同呢?欢迎在文末 读者讨论 或 进群进行交流讨论