【问题标题】:Removing points from plot generated with stat_summary从使用 stat_summary 生成的图中删除点
【发布时间】:2021-01-23 11:43:29
【问题描述】:

有人要求我从使用ggplot2 制作的绘图中删除点。我正在附加一个 MWE:

require(ggplot2)
require(Hmisc)
x = 5
k = 50
kx = k*5
data.A.1 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 0)
data.B.1 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 1)
data.C.1 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 2)
data.A.2 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 3)
data.B.2 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 4)
data.C.2 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 5)
multiple.plot.6x3.interval <- function(D, L) {
    data = data.frame()
    # join all the data in D into 'data'
    e = 0
    NN = ""
    for (i in seq(1, length(D))) {
        lidx = i%%3
        if (lidx == 0) { lidx = 3 }
        if (lidx == 1) {
            e = e + 1
            NN = paste0("10^", e)
        }
        n.obs = length(D[[i]]$n)
        D[[i]]$lang.name = rep(L[lidx], n.obs)
        D[[i]]$N = rep(NN, n.obs)
        data = rbind(data, D[[i]])
    }
    # make the plot
    g <- ggplot(data, aes(x=n, y=v)) +
        stat_summary(  # plot confidence interval
            fun.data = mean_cl_boot, fun.args = (conf.int = 0.99),
            geom = "ribbon", fill = "darkgrey"
        ) +
        stat_summary(  # plot maximum and minimum bars
            fun = mean, fun.min = min, fun.max = max,
            colour = "red", size = 0.15
        ) +
        stat_summary(
            fun = mean,
            geom = "line", linetype = "solid", size = 0.4, color = "black"
        ) +
        coord_cartesian(xlim=c(1, 100)) + 
        scale_x_continuous(breaks=seq(1, 101, 10)-1) +
        facet_grid(
            N ~ lang.name, labeller = "label_parsed"
        ) +
        labs(
            x=bquote("X"),
            y=bquote("Y")
        ) +
        theme(text = element_text(size = 20))
    
    return (g)
}
g <- multiple.plot.6x3.interval(
    list(
        data.A.1, data.B.1, data.C.1,
        data.A.2, data.B.2, data.C.2
    ),
    c("A", "B", "C")
)
plot(g)

这段代码的结果是我想要的,但我被要求删除这个点的例外

        stat_summary(  # plot maximum and minimum bars
            fun = mean, fun.min = min, fun.max = max,
            colour = "red", size = 0.15
        ) +

在保持条形的同时生成。

这是我得到的,我想删除红点(不是红条)。

使用size = 0 将使条形完全不可见。我自己无法做到这一点。我想知道:这可以做到吗?如果是这样,怎么做?任何帮助将不胜感激。

谢谢大家。

【问题讨论】:

    标签: r ggplot2 statistics


    【解决方案1】:

    尝试将geom = "errorbar" 作为stat_summary 的参数:

    require(ggplot2)
    require(Hmisc)
    x = 5
    k = 50
    kx = k*5
    data.A.1 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 0)
    data.B.1 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 1)
    data.C.1 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 2)
    data.A.2 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 3)
    data.B.2 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 4)
    data.C.2 = data.frame(n = rep(sample(1:100, k, replace=FALSE), x), v = rnorm(kx, 1, 2) + 5)
    multiple.plot.6x3.interval <- function(D, L) {
      data = data.frame()
      # join all the data in D into 'data'
      e = 0
      NN = ""
      for (i in seq(1, length(D))) {
        lidx = i%%3
        if (lidx == 0) { lidx = 3 }
        if (lidx == 1) {
          e = e + 1
          NN = paste0("10^", e)
        }
        n.obs = length(D[[i]]$n)
        D[[i]]$lang.name = rep(L[lidx], n.obs)
        D[[i]]$N = rep(NN, n.obs)
        data = rbind(data, D[[i]])
      }
      # make the plot
      g <- ggplot(data, aes(x=n, y=v)) +
        stat_summary(  # plot confidence interval
          fun.data = mean_cl_boot, fun.args = (conf.int = 0.99),
          geom = "ribbon", fill = "darkgrey"
        ) +
        stat_summary(  # plot maximum and minimum bars
          fun = mean, fun.min = min, fun.max = max,
          geom = "errorbar",     ### HERE
          colour = "red", size = 0.15
        ) +
        stat_summary(
          fun = mean,
          geom = "line", linetype = "solid", size = 0.4, color = "black"
        ) +
        coord_cartesian(xlim=c(1, 100)) + 
        scale_x_continuous(breaks=seq(1, 101, 10)-1) +
        facet_grid(
          N ~ lang.name, labeller = "label_parsed"
        ) +
        labs(
          x=bquote("X"),
          y=bquote("Y")
        ) +
        theme(text = element_text(size = 20))
      
      return (g)
    }
    g <- multiple.plot.6x3.interval(
      list(
        data.A.1, data.B.1, data.C.1,
        data.A.2, data.B.2, data.C.2
      ),
      c("A", "B", "C")
    )
    plot(g)
    

    【讨论】:

    • 哦,哇。我希望在发表这篇文章之前我已经在手册页中看到了这个选项。感谢您花时间回答。
    • 当然,我刚刚做到了。直到现在我才这样做,因为出于某种原因,我认为我必须等待。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多