Как сказать ggplot выбрать столбец с кавычками `` - PullRequest
0 голосов
/ 07 мая 2018

То, что я пытаюсь сделать, это сказать ggplot geom_line столбец тиббла с кавычкой ``.

Например, если я напишу буквально «имя» столбца, он будет работать:

это сгенерированный тибль:

Q <- as_tibble(data.frame(series = rep(c("diax","diay"),3),
                          value = c(3.25,3.30,3.31,3.36,3.38,3.42),
                          year = c(2018,2018,2019,2019,2020,2020))) %>%
  select(year, series, value) %>% spread(key = "series", value = "value") %>%
  rename(`2018-01-01` = diax, `2017-01-01` = diay)

А это команда ggplot:

ggplot(Q, aes(x = year)) + 
  geom_line(aes(y = `2018-01-01`), col = "red", size = 2, linetype = "dotdash") +
  geom_line(aes(y = `2017-01-01`), col = "orange", size = 2, linetype = "dashed")

Код выше работает просто отлично.

Но если у меня есть вектор строк с именем столбцов, я просто не могу повторить предыдущий результат, вызывая вектор.

То есть предположим, что у меня есть такой вектор:

nomes <- c("2018-01-01","2017-01-01")

и тогда я бы хотел ggplot что-то вроде этого:

ggplot(Q, aes(x = year)) + 
  geom_line(aes(y = nomes[1]), col = "red", size = 2, linetype = "dotdash") +
  geom_line(aes(y = nomes[2]), col = "orange", size = 2, linetype = "dashed")

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

ggplot(Q, aes(x = year)) + 
  geom_line(aes(y = !!quo(nomes[1])), col = "red", size = 2, linetype = "dotdash") +
  geom_line(aes(y = !!quo(nomes[2])), col = "orange", size = 2, linetype = "dashed")

Я понял, что quo (nomes [1]) не доставляет имя внутри позиции вектора, и я не мог получить то, что хотел, пытаясь найти некоторые альтернативы, о которых я думал.

Ответы [ 2 ]

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

Насколько я могу судить, это то же самое, что вы ищете, но без проблем с именами. Вы можете хранить свои данные в длинном формате и отображать цвет и тип линии в столбце series. Я использовал fct_recode из forcats (поставляется как часть tidyverse), чтобы изменить уровни факторов series, но вы также можете изменить уровни в базе R.

Кроме того, вы можете оставить уровни series такими, какие они есть (diax, diay), и просто изменить метки в том виде, в каком они указаны в легенде в scale_color_manual и scale_linetype_manual.

library(tidyverse)

df <- as_tibble(data.frame(series = rep(c("diax","diay"),3),
                 value = c(3.25,3.30,3.31,3.36,3.38,3.42),
                 year = c(2018,2018,2019,2019,2020,2020))) %>%
    mutate(series = fct_recode(series, "2018-01-01" = "diax", "2017-01-01" = "diay"))

ggplot(df, aes(x = year, y = value, color = series, linetype = series)) +
    geom_line(size = 2) +
    scale_color_manual(values = c("2018-01-01" = "red", "2017-01-01" = "orange")) +
    scale_linetype_manual(values = c("2018-01-01" = "dotdash", "2017-01-01" = "dashed"))

Создано в 2018-05-07 пакетом Представить (v0.2.0).

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

Вы можете as.name:

nomes <- c("2018-01-01","2017-01-01");
ggplot(Q, aes(x = year)) +
    geom_line(aes(y = !!as.name(nomes[1])), col = "red", size = 2, linetype = "dotdash") +
    geom_line(aes(y = !!as.name(nomes[2])), col = "orange", size = 2, linetype = "dashed");

enter image description here

Или используйте rlang::sym:

ggplot(Q, aes(x = year)) +
    geom_line(aes(y = !!rlang::sym(nomes[1])), col = "red", size = 2, linetype = "dotdash") +
    geom_line(aes(y = !!rlang::sym(nomes[2])), col = "orange", size = 2, linetype = "dashed");

Объяснение: Мы преобразуем строку в символ с помощью as.name или rlang::sym, а затем оцениваем символ в текущем окружающем контексте с помощью !!.

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