2015-02-17 1 views
0

Я хочу сделать переменную ggplot вызова пользователя, не меняя вызов ggplot в сценарии ...Используя функцию и переменный столбец в ggplot

У меня есть фрейм данных с различными столбцами Я хотел бы используйте для обозначения точек на моем участке. Многие из этих столбцов длинны, и я хочу предоставить функцию «shortname», чтобы немного сократить столбец ...

Я также хочу сделать эту переменную переменной, и именно здесь я застрял в данный момент.

df <- data.frame(a=c('a;b;c','d;e;f'), b=c('A;B;C','D;E;F'), 
       x=c(1,2), y=c(2,3)) 

use_column <- 'b' 
shortname <- function(x) { 
    sub('([^;]+).*', '\\1', x) 
} 

g <- ggplot(df, aes(x,y)) + geom_point() 
g + geom_text(aes(label=a)) 
g + geom_text(aes(label=shortname(a))) 
g + geom_text(aes(label=shortname(b))) 

До этого момента все работает должным образом. На первых графиках показана колонка сокращенно, а на втором рисунке показана колонка b. Но когда я пытаюсь использовать переменную use_column, я не заставить его работать ...

g + geom_text(aes_string(label=shortname(use_column))) 

Я бегу из идей и надеюсь, что кто-то может помочь мне в этом.

Заранее благодарен!

ответ

1

Проблема заключается в том, что вы используете shortname на b, который возвращает b. Только тогда aes_string считывает полученный b и использует для оценки b.

Этого можно избежать, используя "shortname(b)" вместо shortname("b"). Это

g + geom_text(aes_string(label=paste('shortname(', use_column, ')'))) 

В качестве альтернативы, вы можете использовать aes вместе с get.

g + geom_text(aes(label=shortname(get(use_column)))) 
+0

Да, это по-прежнему трудно читать ... Есть ли способ, чтобы сделать его более удобным для чтения с AES() ... Я просто использовал aes_string() в течение некоторого тестирования ... Но, по крайней мере, его спасибо за это! – drmariod

+0

Мне это нравится! Хотелось бы проголосовать несколько раз! – drmariod

Смежные вопросы