ggpubr包系列学习教程(一)

ggpubr: 'ggplot2' Based Publication Ready Plots

一款基于ggplot2的可视化包ggpubr,能够一行命令绘制出符合出版物要求的图形。

ggplot2 by Hadley Wickham is an excellent and flexible package for elegant data visualization in R. However the default generated plots requires some formatting before we can send them for publication. Furthermore, to customize a ggplot, the syntax is opaque and this raises the level of difficulty for researchers with no advanced R programming skills. The 'ggpubr' package provides some easy-to-use functions for creating and customizing 'ggplot2'- based publication ready plots.

1. R包的安装及加载

ggpubr包可以从CRAN或GitHub中进行下载安装

Install from CRAN as follow:

install.packages("ggpubr")

library(ggpubr)

Or, install the latest version from GitHub as follow:

if(!require(devtools)) install.packages("devtools")

devtools::install_github("kassambara/ggpubr")

library(ggpubr)

2. 常用基本图形的绘制

分布图绘制(Distribution)


01. 带有均值线和地毯线的密度图

#构建数据集

set.seed(1234)

df <- data.frame( sex=factor(rep(c("f", "M"), each=200)),

                 weight=c(rnorm(200, 55), rnorm(200, 58)))

# 预览数据格式

head(df)

# 绘制密度图

ggdensity(df, x="weight", add = "mean", rug = TRUE, color = "sex", fill = "sex",

         palette = c("#00AFBB", "#E7B800")) #rug参数添加地毯线,add参数可以添加均值mean和中位数median

图一

图1. 密度图展示不同性别分组下体重的分布,X轴为体重,Y轴为自动累计的密度,X轴上添加地毯线进一步呈现样本的分布;按性别分别组标记轮廓线颜色,再按性别填充色展示各组的分布,使用palette自定义颜色,是不是很舒服。

02. 带有均值线和边际地毯线的直方图

gghistogram(df, x="weight", add = "mean", rug = TRUE, color = "sex", fill = "sex",

           palette = c("#00AFBB", "#E7B800"))

图二

图2. 带有均值线和边际地毯线的直方图,只是把密度比例还原为了原始数据counts值

箱线/小提琴图绘制(barplot/violinplot)


01. 箱线图+分组形状+统计

#加载数据集ToothGrowth

data("ToothGrowth")

df1 <- ToothGrowth

head(df1)

p <- ggboxplot(df1, x="dose", y="len", color = "dose",

              palette = c("#00AFBB", "#E7B800", "#FC4E07"),

              add = "jitter", shape="dose") #增加了jitter点,点shape由dose映射

p

图三

图3. 箱线图按组着色,同时样本点标记不同形状可以一步区分组或批次

02. 箱线图+分组形状+统计

# 增加不同组间的p-value值,可以自定义需要标注的组间比较

my_comparisons <- list(c("0.5", "1"), c("1", "2"), c("0.5", "2"))

p+stat_compare_means(comparisons = my_comparisons)+    #不同组间的比较

     stat_compare_means(label.y = 50)

图四

图4. stat_compare_means添加组间比较连线和统计P值

03. 内有箱线图的小提琴图+星标记

ggviolin(df1, x="dose", y="len", fill = "dose",

        palette = c("#00AFBB", "#E7B800", "#FC4E07"),

        add = "boxplot", add.params = list(fill="white"))+

 stat_compare_means(comparisons = my_comparisons, label = "p.signif")+   #label这里表示选择显著性标记(星号)

 stat_compare_means(label.y = 50)

图五

图5. ggviolin绘制小提琴图, add = “boxplot”中间再添加箱线图,stat_compare_means中,设置lable=”p.signif”,即可添加星添加组间比较连线和统计P值按星分类。

条形/柱状图绘制(barplot)


data("mtcars")

df2 <- mtcars

df2$cyl <- factor(df2$cyl)

df2$name <- rownames(df2) #添加一行name

head(df2[, c("name", "wt", "mpg", "cyl")])

ggbarplot(df2, x="name", y="mpg", fill = "cyl", color = "white",

         palette = "npg", #杂志nature的配色

         sort.val = "desc", #下降排序

         sort.by.groups=FALSE, #不按组排序

         x.text.angle=60)

图六

图6. 柱状图展示不同车的速度,按cyl为分组信息进行填充颜色,颜色按nature配色方法(支持 ggsci包中的本色方案,如: “npg”, “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” and “rickandmorty”),按数值降序排列。

# 按组进行排序

ggbarplot(df2, x="name", y="mpg", fill = "cyl", color = "white",

         palette = "aaas", #杂志Science的配色

         sort.val = "asc", #上升排序,区别于desc,具体看图演示

         sort.by.groups=TRUE,x.text.angle=60) #按组排序 x.text.angle=90

图七

图7. 由上图中颜色改为Sciences配色方案,按组升序排布,且调整x轴标签60度角防止重叠。

偏差图绘制(Deviation graphs)


偏差图展示了与参考值之间的偏差

df2$mpg_z <- (df2$mpg-mean(df2$mpg))/sd(df2$mpg)    # 相当于Zscore标准化,减均值,除标准差

df2$mpg_grp <- factor(ifelse(df2$mpg_z<0, "low", "high"), levels = c("low", "high"))

head(df2[, c("name", "wt", "mpg", "mpg_grp", "cyl")])

ggbarplot(df2, x="name", y="mpg_z", fill = "mpg_grp", color = "white",

         palette = "jco", sort.val = "asc", sort.by.groups = FALSE,

         x.text.angle=60, ylab = "MPG z-score", xlab = FALSE, legend.title="MPG Group")

图八

图8. 基于Zscore的柱状图,就是原始值减均值,再除标准差。按jco杂志配色方案,升序排列,不按组排列。

# 坐标轴变换

ggbarplot(df2, x="name", y="mpg_z", fill = "mpg_grp", color = "white",

         palette = "jco", sort.val = "desc", sort.by.groups = FALSE,

         x.text.angle=90, ylab = "MPG z-score", xlab = FALSE,

         legend.title="MPG Group", rotate=TRUE, ggtheme = theme_minimal())     # rotate设置x/y轴对换

图九

图9. rotate=TRUE翻转坐标轴,柱状图秒变条形图

棒棒糖图绘制(Lollipop chart)


棒棒图可以代替条形图展示数据

ggdotchart(df2, x="name", y="mpg", color = "cyl",

          palette = c("#00AFBB", "#E7B800", "#FC4E07"),

          sorting = "ascending",

          add = "segments", ggtheme = theme_pubr())

图十

图10. 柱状图太多了单调,改用棒棒糖图添加多样性

设置其他参数

ggdotchart(df2, x="name", y="mpg", color = "cyl",

          palette = c("#00AFBB", "#E7B800", "#FC4E07"),

          sorting = "descending", add = "segments", rotate = TRUE,

          group = "cyl", dot.size = 6,

          label = round(df2$mpg), font.label = list(color="white",

          size=9, vjust=0.5), ggtheme = theme_pubr())

图十一

图11. 棒棒糖图简单调整,rotate = TRUE转换坐标轴, dot.size = 6调整糖的大小,label = round()添加糖心中的数值,font.label进一步设置字体样式

棒棒糖偏差图


ggdotchart(dfm, x = "name", y = "mpg_z",

                    color = "cyl", # Color by groups

                    palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette

                    sorting = "descending", # Sort value in descending order

                    add = "segments", # Add segments from y = 0 to dots

                    add.params = list(color = "lightgray", size = 2), # Change segment color and size

                    group = "cyl", # Order by groups

                    dot.size = 6, # Large dot size

                    label = round(dfm$mpg_z,1), # Add mpg values as dot labels,设置一位小数

                    font.label = list(color = "white", size = 9, vjust = 0.5), # Adjust label parameters

                    ggtheme = theme_pubr() # ggplot2 theme

                    )+

                    geom_hline(yintercept = 0, linetype = 2, color = "lightgray")

图十二

图12. 同柱状图类似,用Z-score的值代替原始值绘图。

Cleveland点图绘制


ggdotchart(dfm, x = "name", y = "mpg",

                    color = "cyl", # Color by groups

                    palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette

                    sorting = "descending", # Sort value in descending order

                    rotate = TRUE, # Rotate vertically

                    dot.size = 2, # Large dot size

                    y.text.col = TRUE, # Color y text by groups

                    ggtheme = theme_pubr() # ggplot2 theme

                    )+

                    theme_cleveland() # Add dashed grids

图十三

图13. theme_cleveland()主题可设置为Cleveland点图样式

3. 常用基本绘图函数及参数

基本绘图函数

gghistogram        Histogram plot #绘制直方图

ggdensity        Density plot #绘制密度图

ggdotplot        Dot plot #绘制点图

ggdotchart        Cleveland's Dot Plots #绘制Cleveland点图

ggline        Line plot #绘制线图

ggbarplot        Bar plot #绘制柱状图

ggstripchart        Stripcharts #绘制带状图

ggboxplot        Box plot #绘制箱线图

ggviolin        Violin plot #绘制小提琴图

ggpie        Pie chart #绘制饼图

ggqqplot        QQ Plots #绘制QQ图

ggscatter        Scatter plot #绘制散点图

ggmaplot        MA-plot from means and log fold changes #绘制M-A图

ggpaired        Plot Paired Data #绘制散点图矩阵

ggerrorplot        Visualizing Error #绘制误差图

基本参数

ggtext        Text #添加文本

border        Set ggplot Panel Border Line #设置画布边框

grids        Add Grids to a ggplot #添加网格线

font        Change the Appearance of Titles and Axis Labels #设置字体类型

bgcolor        Change ggplot Panel Background Color #更改画布背景颜色

background_image        Add Background Image to ggplot2 #添加背景图片

facet        Facet a ggplot into Multiple Panels #设置分面

ggpar        Graphical parameters #添加画图参数

ggparagraph        Draw a Paragraph of Text #添加文本段落

ggtexttable        Draw a Textual Table #添加文本表格

ggadd        Add Summary Statistics or a Geom onto a ggplot #添加基本统计结果或其他几何图形

ggarrange        Arrange Multiple ggplots #排版多个图形

gradient_color        Set Gradient Color #设置连续型颜色

xscale        Change Axis Scale: log2, log10 and more #更改坐标轴的标度

add_summary        Add Summary Statistics onto a ggplot #添加基本统计结果

set_palette        Set Color Palette #设置画板颜色

rotate        Rotate a ggplot Horizontally #设置图形旋转

rotate_axis_text        Rotate Axes Text #旋转坐标轴文本

stat_stars        Add Stars to a Scatter Plot #添加散点图星标

stat_cor        Add Correlation Coefficients with P-values to a Scatter Plot #添加相关系数

stat_compare_means        Add Mean Comparison P-values to a ggplot #添加平均值比较的P值

theme_transparent        Create a ggplot with Transparent Background #设置透明背景

theme_pubr        Publication ready theme #设置出版物主题


参考来源:https://www.rdocumentation.org/packages/ggpubr/versions/0.1.4

                  https://mp.weixin.qq.com/s/ZKxzKZ4NBTcsJ6vFimxoGA

                  http://blog.sciencenet.cn/blog-3334560-1091714.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容