2013-08-20 3 views
0

을 사용하여 오차 막대 나는 같은이 names 기능을 사용하는 열 이름을 추출하는 일반적인 기능을 사용하여 ggplot2에 각 데이터 포인트에 대해 오차 막대를 생성하고 싶습니다. 데모 코드를 다음과 같은 :ggplot2 - 사용자 정의 기능

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

어떤 제안 :

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) 

이 다음과 같은 오류를 제공 실행? 감사.

답변

7

당신이 포함 된 문자열을 전달해야합니다 - ('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) 

enter image description here