ggplot2 - панель ошибок с использованием пользовательской функции
Я хочу создать панель ошибок для каждой точки данных в 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
Какие-либо предложения? Благодарю.
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)