美文网首页
ggpur-ggplot2还是太难

ggpur-ggplot2还是太难

作者: xmu_zhang_lab | 来源:发表于2019-10-16 09:16 被阅读0次

    如果觉得ggplot2对你来说还是太难, 可以尝试用ggpur ...

    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.

    Find out more at https://rpkgs.datanovia.com/ggpubr.

    安装与加载ggpur

    • Install from CRAN as follow:
    install.packages("ggpubr")
    
    • Or, install the latest version from GitHub as follow:
    # Install
    if(!require(devtools)) install.packages("devtools")
    devtools::install_github("kassambara/ggpubr")
    

    1. 频数分布图

    library(ggpubr)
    #> Le chargement a nécessité le package : ggplot2
    #> Le chargement a nécessité le package : magrittr
    # Create some data format
    # :::::::::::::::::::::::::::::::::::::::::::::::::::
    set.seed(1234)
    wdata = data.frame(
       sex = factor(rep(c("F", "M"), each=200)),
       weight = c(rnorm(200, 55), rnorm(200, 58)))
    head(wdata, 4)
    #>   sex   weight
    #> 1   F 53.79293
    #> 2   F 55.27743
    #> 3   F 56.08444
    #> 4   F 52.65430
    
    # Density plot with mean lines and marginal rug
    # :::::::::::::::::::::::::::::::::::::::::::::::::::
    # Change outline and fill colors by groups ("sex")
    # Use custom palette
    ggdensity(wdata, x = "weight",
       add = "mean", rug = TRUE,
       color = "sex", fill = "sex",
       palette = c("#00AFBB", "#E7B800"))
    
    图片.png
    # Histogram plot with mean lines and marginal rug
    # :::::::::::::::::::::::::::::::::::::::::::::::::::
    # Change outline and fill colors by groups ("sex")
    # Use custom color palette
    gghistogram(wdata, x = "weight",
       add = "mean", rug = TRUE,
       color = "sex", fill = "sex",
       palette = c("#00AFBB", "#E7B800"))
    
    图片.png

    2. 箱线图和小提琴图

    
    # Load data
    data("ToothGrowth")
    df <- ToothGrowth
    head(df, 4)
    #>    len supp dose
    #> 1  4.2   VC  0.5
    #> 2 11.5   VC  0.5
    #> 3  7.3   VC  0.5
    #> 4  5.8   VC  0.5
    
    # Box plots with jittered points
    # :::::::::::::::::::::::::::::::::::::::::::::::::::
    # Change outline colors by groups: dose
    # Use custom color palette
    # Add jitter points and change the shape by groups
     p <- ggboxplot(df, x = "dose", y = "len",
                    color = "dose", palette =c("#00AFBB", "#E7B800", "#FC4E07"),
                    add = "jitter", shape = "dose")
     p
    
    图片.png
    
     # Add p-values comparing groups
     # Specify the comparisons you want
    my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )
    p + stat_compare_means(comparisons = my_comparisons)+ # Add pairwise comparisons p-value
      stat_compare_means(label.y = 50)                   # Add global p-value
    
    图片.png
    # Violin plots with box plots inside
    # :::::::::::::::::::::::::::::::::::::::::::::::::::
    # Change fill color by groups: dose
    # add boxplot with white fill color
    ggviolin(df, 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")+ # Add significance levels
      stat_compare_means(label.y = 50)                                      # Add global the p-value 
    
    图片.png

    3. 柱状图

    Demo data set

    Load and prepare data:

    # Load data
    data("mtcars")
    dfm <- mtcars
    # Convert the cyl variable to a factor
    dfm$cyl <- as.factor(dfm$cyl)
    # Add the name colums
    dfm$name <- rownames(dfm)
    # Inspect the data
    head(dfm[, c("name", "wt", "mpg", "cyl")])
    #>                                name    wt  mpg cyl
    #> Mazda RX4                 Mazda RX4 2.620 21.0   6
    #> Mazda RX4 Wag         Mazda RX4 Wag 2.875 21.0   6
    #> Datsun 710               Datsun 710 2.320 22.8   4
    #> Hornet 4 Drive       Hornet 4 Drive 3.215 21.4   6
    #> Hornet Sportabout Hornet Sportabout 3.440 18.7   8
    #> Valiant                     Valiant 3.460 18.1   6
    

    3.1. 有序柱状图

    Change the fill color by the grouping variable “cyl”. Sorting will be done globally, but not by groups.

    ggbarplot(dfm, x = "name", y = "mpg",
              fill = "cyl",               # change fill color by cyl
              color = "white",            # Set bar border colors to white
              palette = "jco",            # jco journal color palett. see ?ggpar
              sort.val = "desc",          # Sort the value in dscending order
              sort.by.groups = FALSE,     # Don't sort inside each group
              x.text.angle = 90           # Rotate vertically x axis texts
              )
    
    图片.png

    Sort bars inside each group. Use the argument sort.by.groups = TRUE.

    ggbarplot(dfm, x = "name", y = "mpg",
              fill = "cyl",               # change fill color by cyl
              color = "white",            # Set bar border colors to white
              palette = "jco",            # jco journal color palett. see ?ggpar
              sort.val = "asc",           # Sort the value in dscending order
              sort.by.groups = TRUE,      # Sort inside each group
              x.text.angle = 90           # Rotate vertically x axis texts
              )
    

    [图片上传失败...(image-13a3a9-1571188580112)]

    3.2. 偏差图

    The deviation graph shows the deviation of quantitatives values to a reference value. In the R code below, we’ll plot the mpg z-score from the mtcars dataset.

    Calculate the z-score of the mpg data:

    # Calculate the z-score of the mpg data
    dfm$mpg_z <- (dfm$mpg -mean(dfm$mpg))/sd(dfm$mpg)
    dfm$mpg_grp <- factor(ifelse(dfm$mpg_z < 0, "low", "high"), 
                         levels = c("low", "high"))
    # Inspect the data
    head(dfm[, c("name", "wt", "mpg", "mpg_z", "mpg_grp", "cyl")])
    #>                                name    wt  mpg      mpg_z mpg_grp cyl
    #> Mazda RX4                 Mazda RX4 2.620 21.0  0.1508848    high   6
    #> Mazda RX4 Wag         Mazda RX4 Wag 2.875 21.0  0.1508848    high   6
    #> Datsun 710               Datsun 710 2.320 22.8  0.4495434    high   4
    #> Hornet 4 Drive       Hornet 4 Drive 3.215 21.4  0.2172534    high   6
    #> Hornet Sportabout Hornet Sportabout 3.440 18.7 -0.2307345     low   8
    #> Valiant                     Valiant 3.460 18.1 -0.3302874     low   6
    

    Create an ordered barplot, colored according to the level of mpg:

    ggbarplot(dfm, x = "name", y = "mpg_z",
              fill = "mpg_grp",           # change fill color by mpg_level
              color = "white",            # Set bar border colors to white
              palette = "jco",            # jco journal color palett. see ?ggpar
              sort.val = "asc",           # Sort the value in ascending order
              sort.by.groups = FALSE,     # Don't sort inside each group
              x.text.angle = 90,          # Rotate vertically x axis texts
              ylab = "MPG z-score",
              xlab = FALSE,
              legend.title = "MPG Group"
              )
    
    图片.png

    3.3 旋转图形

    ggtheme参数设置主题:

    ggbarplot(dfm, x = "name", y = "mpg_z",
              fill = "mpg_grp",           # change fill color by mpg_level
              color = "white",            # Set bar border colors to white
              palette = "jco",            # jco journal color palett. see ?ggpar
              sort.val = "desc",          # Sort the value in descending order
              sort.by.groups = FALSE,     # Don't sort inside each group
              x.text.angle = 90,          # Rotate vertically x axis texts
              ylab = "MPG z-score",
              legend.title = "MPG Group",
              rotate = TRUE,
              ggtheme = theme_minimal()
              )
    
    图片.png

    4.点图

    4.1. Lollipop chart-棒棒糖图

    Lollipop chart is an alternative to bar plots, when you have a large set of values to visualize.

    Lollipop chart colored by the grouping variable “cyl”:

    ggdotchart(dfm, x = "name", y = "mpg",
               color = "cyl",                                # Color by groups
               palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette
               sorting = "ascending",                        # Sort value in descending order
               add = "segments",                             # Add segments from y = 0 to dots
               ggtheme = theme_pubr()                        # ggplot2 theme
               )
    
    图片.png
    • Sort in decending order. sorting = “descending”.
    • Rotate the plot vertically, using rotate = TRUE.
    • Sort the mpg value inside each group by using group = “cyl”.
    • Set dot.size to 6.
    • Add mpg values as label. label = “mpg” or label = round(dfm$mpg).
    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
               add = "segments",                             # Add segments from y = 0 to dots
               rotate = TRUE,                                # Rotate vertically
               group = "cyl",                                # Order by groups
               dot.size = 6,                                 # Large dot size
               label = round(dfm$mpg),                        # Add mpg values as dot labels
               font.label = list(color = "white", size = 9, 
                                 vjust = 0.5),               # Adjust label parameters
               ggtheme = theme_pubr()                        # ggplot2 theme
               )
    
    图片.png

    4.2. Deviation graph:

    • Use y = “mpg_z”
    • Change segment color and size: add.params = list(color = “lightgray”, size = 2)
    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")
    
    图片.png

    4.3. Cleveland’s dot plot

    Color y text by groups. Use y.text.col = TRUE.

    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
    
    图片.png

    更多应用实例

    密度图、频数图上加文字

    By kassambara, The 02/09/2017 in ggpubr: Publication Ready Plots

    Add Text Labels to Histogram and Density Plots

    In this article, we’ll explain how to create histograms/density plots with text labels using the ggpubr package. I used this type of plots in my recent scientific publication entitled “Global... [Read more]

    多图-组图、分面 ggplots: Easy Guide to Facet

    By kassambara, The 02/09/2017 in ggpubr: Publication Ready Plots

    Create and Customize Multi-panel ggplots: Easy Guide to Facet

    This article describes how to split up your data by one or more variables and to visualize the subsets of the data together. The function facet() [in ggpubr] allows to draw multi-panel plots... [Read more]

    ggplot2 - 修改图形参数

    By kassambara, The 01/09/2017 in ggpubr: Publication Ready Plots

    ggplot2 - Easy Way to Change Graphical Parameters

    This article describes the function ggpar() [in ggpubr], which can be used to simply and easily customize any ggplot2-based graphs. The graphical parameters that can be changed using ggpar()... [Read more]

    ggplot2 - 多图组图

    By kassambara, The 01/09/2017 in ggpubr: Publication Ready Plots

    ggplot2 - Easy Way to Mix Multiple Graphs on The Same Page

    To arrange multiple ggplot2 graphs on the same page, the standard R functions - par() and layout() - cannot be used. The basic solution is to use the gridExtra R package, which comes with the... [Read more]

    条形图+ Modern Alternatives

    By kassambara, The 01/09/2017 in ggpubr: Publication Ready Plots

    Bar Plots and Modern Alternatives

    This article describes how to create easily basic and ordered bar plots using ggplot2 based helper functions available in the ggpubr R package. We’ll also present some modern alternatives to bar... [Read more]

    均值、标准偏差做图

    By kassambara, The 01/09/2017 in ggpubr: Publication Ready Plots

    Plot Means/Medians and Error Bars

    In this article, we’ll describe how to plot easily means or medians with error bars. We’ll use ggplot2 based helper functions available in the ggpubr R... [Read more]

    散点图相关性分析+密度图

    By kassambara, The 01/09/2017 in ggpubr: Publication Ready Plots

    Perfect Scatter Plots with Correlation and Marginal Histograms

    Scatter plots are used to display the relationship between two variables x and y. In this article, we’ll start by showing how to create beautiful scatter plots in R. We’ll use helper functions... [Read more]

    TCGA癌症数据展示

    By kassambara, The 31/08/2017 in ggpubr: Publication Ready Plots

    Facilitating Exploratory Data Visualization: Application to TCGA Genomic Data

    In genomic fields, it’s very common to explore the gene expression profile of one or a list of genes involved in a pathway of interest. Here, we present some helper functions in the ggpubr R... [Read more]

    增加显著性标注

    By kassambara, The 31/08/2017 in ggpubr: Publication Ready Plots

    Add P-values and Significance Levels to ggplots

    In this article, we’ll describe how to easily i) compare means of two or multiple groups; ii) and to automatically add p-values and significance levels to a ggplot (such as box plots, dot plots,... [Read more]

    了解更多ggpur

    用简单的函数即可对图形进行高度的定制,熟悉这些参数,然后调整自己的数据格式,绘制各种高级的图,R真是包罗万象
    原始参考资料

    相关文章

      网友评论

          本文标题:ggpur-ggplot2还是太难

          本文链接:https://www.haomeiwen.com/subject/vcojmctx.html