今天来谈一下我对
ggpubr
包的看法,记得刚开始学习数据可视化分析时,某一天突然看到ggpubr
包感觉如获至宝;被其文案所打动,制作美观可用于发表的图表。Alboukadel Kassambara无疑是一个出色的数据分析专家,ggpubr
,rstatix
等软件包在统计分析上也有其可取之处。但是ggpubr
在数据可视化上不兼容ggplot2
语法自成一套,除非能去看源代码,不然会禁锢在作者展示的示例之中,从而完全体会不到ggplot2
的强大之处。建议想学习好数据可视化的小伙伴还是尽量不使用ggpubr
不然你会走不少弯路下面通过几个案例来展示ggpubr
与ggplot2
之间的区别
后台回复关键词ggpubr获取交互式文档
密度图(ggpubr)版
pacman::p_load(tidyverse,aplot,reshape,ggpubr)
wdata = data.frame(
sex = factor(rep(c("F", "M"), each=200)),
weight = c(rnorm(200, 55), rnorm(200, 58)))
ggdensity(wdata, x = "weight",
add = "mean", rug = TRUE,
color = "sex", fill = "sex",
palette = c("#00AFBB", "#E7B800"))
可以看到ggpubr的代码是相当的简洁,难怪这么多的人对他趋之若鹜,但是为什么不建议初学者使用它进行数据可视化那,请继续往下看,下面通过ggplot2来绘制一张同样的图,请观众老爷们细细品味
密度图(ggplot2)版
mu <- wdata %>% group_by(sex) %>%
summarize(mean= mean(weight))
wdata %>% ggplot(aes(weight,fill=sex,color=sex))+
geom_density(alpha=0.6)+
scale_color_manual(values=c("#00AFBB", "#E7B800"))+
scale_fill_manual(values=c("#00AFBB", "#E7B800"))+
geom_rug(aes(color=sex))+
geom_vline(data=mu,aes(xintercept=mean,color=sex),
linetype="dashed")+
labs(x=NULL,y=NULL)+
theme_classic()+
theme(legend.position = "top",
plot.margin = unit(c(0.5, 0.5,0.5,0.5),"cm"),
axis.text.x = element_text(size=13,color="black"),
axis.text.y = element_text(size=13,color="black"),
panel.background = element_rect(fill = "white"))
2张图唯一的区别应该就是在颜色透明度上的了,但是细看ggplot2的绘图代码会发现我们调用了很多的函数,代码远不如ggpubr简洁,但是通过这么一整段的代码我们运用了几乎一整套ggplot2的语法,下面来详细进行解释
mu <- wdata %>% group_by(sex) %>%
summarize(mean= mean(weight))
首先我们使用了第一个参数 %>%(管道) 它的作用是将左边的参数传递到右边从而减少中间变量的使用
接着我们使用了 dplyr包,它是tidyverse的组成部分在加载tidyverse是会自动加载它;dplyr中有一系列强大的数据处理函数,认真掌握可以让你的数据分析过程异常轻松,详细内容参考官方教程:https://dplyr.tidyverse.org/;在此段代码中我们使用 group_by( )按sex对数据进行分组,再紧接summarize( )函数进行统计,此处我们只统计了平均值,有了均值数据才可绘制图中的线条,我们将结果赋值给变量mu.
> mu
# A tibble: 2 x 2
sex mean
<fct> <dbl>
1 F 54.9
2 M 58.1
wdata %>% ggplot(aes(weight,fill=sex,color=sex))+
geom_density(alpha=0.6)+
scale_color_manual(values=c("#00AFBB", "#E7B800"))+
scale_fill_manual(values=c("#00AFBB", "#E7B800"))+
geom_rug(aes(color=sex,alpha=0.6),show.legend = F)+
geom_vline(data=mu,aes(xintercept=mean,color=sex),
linetype="dashed")+
labs(x=NULL,y=NULL)+
theme_classic()+
theme(legend.position = "top",
plot.margin = unit(c(0.5, 0.5,0.5,0.5), "cm"),
axis.text.x = element_text(size=13,color="black"),
axis.text.y = element_text(size=13,color="black"),
panel.background = element_rect(fill = "white"))
上面这段代码我们自定义了2类颜色,3种几何对象,最终通过theme函数对图像文本进行了全面设置。为了更直观的查看每一行代码的含义,我制作了一个交互式文档,后台回复关键词ggpubr获取交互式文档