Как наложить гистограмму на линейный график в R? - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу выложить данные за несколько лет, основанные на неделях. Я ожидаю, что последний год (2020 год) будет барным чатом, а предыдущие годы (2019 и 2018 годы) - линейными.

Мой текущий код отображает визуальное значение ниже

data %>%
  ggplot(aes(week, result, fill = year)) +
  geom_col()

Диаграмма

Если бы я хотел сделать все годы гистограммой, я бы знал, что мог бы использовать «dodge» в geom_col. Тем не менее, я пытаюсь разбить данные на разные geoms

Когда я использую функцию подмножества (код ниже), что-то странное происходит с моей диаграммой, и я не могу понять, что происходит

data %>%
  ggplot(aes(week, result, fill = year)) +
  geom_col(data = subset(data, year == 2020)) +
  geom_line(data = subset(data, year != 2020))

Диаграмма 2

Ниже приведен образец данных, которые я использую. Есть идеи, что я делаю не так?

structure(list(year = c("2018", "2018", "2019", "2019", "2020", 
"2020"), week = c(1L, 2L, 1L, 2L, 1L, 2L), result = c(6.88475831020016, 
7.62267452779933, 3.67553313593328, 6.18354398162893, 2.38101968527051, 
5.9596355812872)), .Names = c("year", "week", "result"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

1 Ответ

0 голосов
/ 20 февраля 2020

Я не уверен, где ваша ошибка, но с моим фиктивным примером, имитирующим ваш пример, я просто добавляю color в aes, чтобы строки были сгруппированы по годам, а остальная часть кода похожа на вашу:

ggplot(df, aes(x = week, y = Value, 
               color = as.factor(year),
               fill = as.factor(year)))+
  geom_col(data = subset(df, year == 2020)) +
  geom_line(data = subset(df, year != 2020))

enter image description here

Данные

df <- data.frame(year = rep(2018:2020, each = 7),
                 week = rep(1:7,3),
                 Value = rnorm(21))

РЕДАКТИРОВАТЬ с данными OP

Исходя из ваших данных, вам просто нужно установить подмножество на основе символьных значений, а не числовых, как указано @camille:

ggplot(df, aes(x = week, y = result, 
                 color =year,
                 fill = year))+
    geom_col(data = subset(df, year == "2020")) +
    geom_line(data = subset(df, year != "2020"))

enter image description here

...