R ggplot2 aes аргумент - PullRequest
       7

R ggplot2 aes аргумент

0 голосов
/ 29 мая 2018

У меня есть функция:

vis = function(df, x){
p1 <- ggplot(df, aes(x)) + geom_line(aes(y = v2))
p1
}

У меня есть фрейм данных:

df = data.frame(v0 = c(1,2,3), v1 = c(2,3,4), v2 = c(3,4,5))

Я хочу создать график: (1) v2 vs v0, (2) v2 vsv1.

Итак, я попытался:

vis(df, v0) // not work
vis(df, v1) // not work
vis(df, "v0") // not work
vis(df, "v1") // not work

Очень ценил любую идею!

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вы можете использовать имя столбца:

df = data.frame(v0 = c(1,2,3), v1 = c(2,3,4), v2 = c(3,4,5))

vis = function(df, x){
  p1 <- ggplot(df, aes(df[,x])) + 
    geom_line(aes(y = v2))+xlab(x)
  p1
}
vis(df, "v0")
0 голосов
/ 29 мая 2018

Другой метод, использующий quo_name и aes_string.Для этого не требуется версия dev ggplot2:

library(ggplot2)
library(rlang)

vis = function(df, x){
  x <- enquo(x)
  ggplot(df, aes_string(quo_name(x))) + geom_line(aes(y = v2))
}

vis(df, v0)

enter image description here

0 голосов
/ 29 мая 2018

Если мы передаем строку без кавычек, затем преобразуем ее в выражение и затем оцениваем (!!)

library(rlang)
library(ggplot2)#devel version

vis = function(df, x){
    x <- enquo(x)
    p1 <- ggplot(df, aes(!!x)) + 
                      geom_line(aes(y = v2))
    p1
}

Если мы передаем x как строки, то заменим aes на aes_string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...