Участок с чертой и линией и двумя осями у - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно построить гистограмму, показывающую количество и график, показывающий среднее. Это все в одном графике с несколькими осями Y.

Вот пример кадра данных:

df <- data.frame("YearMonth" = c(20141, 20142, 20143, 20144), "Count" = c(435, 355, 360, 318), "Average" = c(107, 85, 86, 74))

Как это можно сделать?

Большое спасибо.

1 Ответ

1 голос
/ 07 марта 2019

{ggplot2} преднамеренно не поддерживает такого рода множественные оси Y , поскольку существует широкий консенсус в отношении того, что они являются плохой идеей, поскольку допускают неверную интерпретацию данных. Смотрите, например Почему бы не использовать две оси и что использовать вместо :

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

Единственный вид вспомогательной оси y, который поддерживает {ggplot2}, - это масштабирование первичной оси, см. sec_axis. Такая вторичная ось не страдает от той же проблемы, но она не будет работать в вашем сценарии: то, что вы хотите, действительно является одним из случаев, которые {ggplot2} намеренно не поддерживает.

Что вы можете сделать , однако, это дублировать одну ось Y и наложить столбцы и средние значения (хотя не ясно, что столбцы представляют в этом случае ):

# fix the `YearMonth` column:
df$YearMonth = lubridate::ymd(paste(sub('(.)$', '0\\1', as.character(df$YearMonth)),'01'))

ggplot(df) +
    aes(YearMonth) +
    geom_col(aes(y = Count)) +
    geom_line(aes(y = Average), size = 2, color = 'lightblue') +
    scale_y_continuous(sec.axis = dup_axis(name = NULL))

dual y-axis

...