R甲基化

为什么我不建议初学者使用ggpubr绘图

2021-04-02  本文已影响0人  R语言数据分析指南

今天来谈一下我对ggpubr包的看法,记得刚开始学习数据可视化分析时,某一天突然看到ggpubr包感觉如获至宝;被其文案所打动,制作美观可用于发表的图表。Alboukadel Kassambara无疑是一个出色的数据分析专家,ggpubrrstatix等软件包在统计分析上也有其可取之处。但是ggpubr在数据可视化上不兼容ggplot2语法自成一套,除非能去看源代码,不然会禁锢在作者展示的示例之中,从而完全体会不到ggplot2的强大之处。建议想学习好数据可视化的小伙伴还是尽量不使用ggpubr不然你会走不少弯路下面通过几个案例来展示ggpubrggplot2之间的区别

后台回复关键词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获取交互式文档

上一篇下一篇

猜你喜欢

热点阅读