ggpmisc也是ggplot2的扩展包(或者说是ggplot2生态圈中的一份子),它可以方便的展示诸如直线回归、并添加回归方程、方差分析表等等一些操作,极大的方便了R绘图效率。

# 安装
install.packages("ggpmisc")

下面挑选部分经典案例做一个简单介绍:

# 一下示例基于下面R包,如果需要模仿示例运行,请酌情安装
library(dplyr)
library(ggplot2)
library(ggthemes)
library(ggpmisc)
library(ggrepel)
library(xts)
library(lubridate)
library(tibble)
library(nlme)

1)时间序列绘图:

# lynx自带演示数据
ggplot(lynx, as.numeric = FALSE) + geom_line() +
    stat_peaks(colour = "red") +
    stat_peaks(
        geom = "text",
        colour = "red",
        vjust = -0.5,
        check_overlap = TRUE
    ) +
    theme_few() +
    ylim(-100, 7300)

2)象限统计分面图:


set.seed(2020)
# 生成演示数据
x <- -99:100
y <- x + rnorm(length(x), mean = 0, sd = abs(x))
my.data <- data.frame(x,
                      y,
                      group = c("A", "B"))
ggplot(my.data, aes(x, y, colour = group)) +
    geom_quadrant_lines() +
    stat_quadrant_counts(geom = "label_npc") +
    geom_point() +
    expand_limits(y = c(-260, 260)) +
    theme_few() +
    facet_wrap( ~ group)

3)回归方程+拟合线


set.seed(2020)
# 演示数据
x <- 1:100
y <-
    (x + x ^ 2 + x ^ 3) + rnorm(length(x), mean = 0, sd = mean(x ^ 3) / 4)
my.data <- data.frame(
    x,
    y,
    group = c("A", "B"),
    y2 = y * c(0.5, 2),
    block = c("a", "a", "b", "b"),
    wt = sqrt(x)
)


formula <- y ~ poly(x, 3, raw = TRUE)
ggplot(my.data, aes(x, y2, colour = group)) +
    geom_point() +
    geom_smooth(method = "lm", formula = formula) +
    theme_few() +
    stat_poly_eq(
        aes(label = stat(eq.label)),
        formula = formula,
        parse = TRUE,
        label.x = "centre"
    )

set.seed(2020)
# 演示数据
x <- 1:100
y <-
    (x + x ^ 2 + x ^ 3) + rnorm(length(x), mean = 0, sd = mean(x ^ 3) / 4)
my.data <- data.frame(
    x,
    y,
    group = c("A", "B"),
    y2 = y * c(0.5, 2),
    block = c("a", "a", "b", "b"),
    wt = sqrt(x)
)

formula <- y ~ poly(x, 3, raw = TRUE)
ggplot(my.data, aes(x, y2, colour = group, fill = block)) +
    geom_point(shape = 21, size = 3) +
    geom_smooth(method = "lm", formula = formula) +
    stat_poly_eq(
        aes(label = stat(rr.label)),
        size = 3,
        alpha = 0.2,
        geom = "label_npc",
        label.y = c(0.95, 0.85, 0.95, 0.85),
        formula = formula,
        parse = TRUE
    ) +
    theme_few() +
    facet_wrap( ~ group, scales = "free_y")

4)添加方差分析表


set.seed(2020)
# 演示数据
x <- 1:100
y <-
    (x + x ^ 2 + x ^ 3) + rnorm(length(x), mean = 0, sd = mean(x ^ 3) / 4)
my.data <- data.frame(
    x,
    y,
    group = c("A", "B"),
    y2 = y * c(0.5, 2),
    block = c("a", "a", "b", "b"),
    wt = sqrt(x)
)

formula <- y ~ x + I(x ^ 2) + I(x ^ 3)
ggplot(my.data, aes(x, y)) +
    geom_point() +
    geom_smooth(method = "lm", formula = formula) +
    theme_few() +
    stat_fit_tb(
        method = "lm",
        method.args = list(formula = formula),
        tb.vars = c(
            Parameter = "term",
            Estimate = "estimate",
            "s.e." = "std.error",
            "italic(t)" = "statistic",
            "italic(P)" = "p.value"
        ),
        label.y = "top",
        label.x = "left",
        parse = TRUE
    )

5)数据加标注等


random_string <- function(len = 6) {
    paste(sample(letters, len, replace = TRUE), collapse = "")
}

# 演示数据
set.seed(2020)
d <- tibble::tibble(
    x = rnorm(100),
    y = rnorm(100),
    group = rep(c("A", "B"), c(50, 50)),
    lab = replicate(100, {
        random_string()
    })
)

ggplot(data = d, aes(x + rep(c(-2, 2), rep(50, 2)),
                     y, colour = group)) +
    theme_few() +
    geom_point() +
    stat_dens2d_filter(shape = 1,
                       size = 3,
                       keep.fraction = 0.25)

ggplot(data = d, aes(x, y, label = lab, colour = group)) +
    geom_point() +
    theme_few() +
    stat_dens2d_filter(geom = "text_repel", keep.fraction = 0.5)

6)还能画火山图


volcano_example.df %>%
    mutate(., outcome.fct = outcome2factor(outcome)) %>%
    ggplot(., aes(logFC, PValue, colour = outcome.fct)) +
    geom_point() +
    scale_x_logFC(name = "Transcript abundance%unit") +
    scale_y_Pvalue() +
    scale_colour_outcome() +
    theme_few() +
    stat_quadrant_counts(data = . %>% filter(outcome != 0))

总体感觉此包功能上还是蛮全面的,也做了很多个性化的设置,以上就是此包的主要一些功能介绍本文旨在抛砖引玉,更多详细的内容请大家查看官方文档。

参考资料:

1.https://docs.r4photobiology.info/ggpmisc/index.html