【问题标题】:ggplot2 - Error bars using a custom functionggplot2 - 使用自定义函数的误差线
【发布时间】:2013-08-22 01:21:24
【问题描述】:

我希望使用通用函数为ggplot2 中的每个数据点生成错误栏,该函数使用names 函数提取相同的列名。下面是一段演示代码:

plotfn <- function(data, xind, yind, yerr) {
    yerrbar <- aes_string(ymin=names(data)[yind]-names(data)[yerr], ymin=names(data) [yind]+names(data)[yerr])
    p <- ggplot(data, aes_string(x=names(data)[xind], y=names(data)[yind]) + geom_point() + geom_errorbar(yerrbar)
    p
}

errdf <- data.frame('X'=rnorm(100, 2, 3), 'Y'=rnorm(100, 5, 6), 'eY'=rnorm(100))
plotfn(errdf, 1, 2, 3)

运行它会出现以下错误:

Error in names(data)[yind] - names(data)[yerr] : 
  non-numeric argument to binary operator

有什么建议吗?谢谢。

【问题讨论】:

    标签: r function ggplot2 scatter-plot


    【解决方案1】:

    你需要传递一个包含-的字符串('a-b'不是'a'-'b'

    例如,

    ggplot(mtcars,aes_string(y = 'mpg-disp',x = 'am')) + geom_point()
    

    在你的例子中

    plotfn <- function(data, xind, yind, yerr) {
      # subset the names now so it is slightly less typing later
      yerr_names <- names(data)[c(yind,yerr)]
    
      yerrbar <- aes_string(ymin = paste(yerr_names, collapse = '-'), 
                             ymax = paste(yerr_names,collapse='+'))
       p <- ggplot(data, aes_string(x=names(data)[xind], y=names(data)[yind])) + 
         geom_point() + 
         geom_errorbar(mapping = yerrbar)
              p
    }
    
    # a slightly smaller, reproducible example
    set.seed(1)
    errdf <- data.frame('X'=rnorm(10, 2, 3), 'Y'=rnorm(10, 5, 6), 'eY'=rnorm(10))
    plotfn(errdf, 1, 2, 3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多