Линейный график со столбцами на вторичной оси с разными масштабами в ggplot2

#r #ggplot2

#r #ggplot2

Вопрос:

Я пытаюсь построить линейный график (точки данных между 0 и 2,5, с интервалом 0,5). Я хочу построить несколько столбиков на одном графике на правой оси (между 0 и 60 с интервалом 10). Я допускаю некоторую ошибку в своем коде, так что полосы отображаются на левой оси.

Вот несколько примеров данных и кода:

 Month <- c("J","F","M","A")
Line <- c(2.5,2,0.5,3.4)
Bar <- c(30,33,21,40)
df <- data.frame(Month,Line,Bar)

ggplot(df, aes(x=Month))  
  geom_line(aes(y = Line,group = 1))  
  geom_col(aes(y=Bar)) 
  scale_y_continuous("Line",
                     sec.axis = sec_axis(trans= ~. /50, name = "Bar"))
  

Вот результат

Заранее спасибо.

Ответ №1:

Попробуйте этот подход с коэффициентом масштабирования. Лучше, если вы работаете с коэффициентом масштабирования между вашими переменными, а затем используете его для второй оси y. Я внес небольшие изменения в ваш код:

 library(tidyverse)
#Data
Month <- c("J","F","M","A")
Line <- c(2.5,2,0.5,3.4)
Bar <- c(30,33,21,40)
df <- data.frame(Month,Line,Bar)
#Scale factor
sfactor <- max(df$Line)/max(df$Bar)
#Plot
ggplot(df, aes(x=Month))  
  geom_line(aes(y = Line,group = 1))  
  geom_col(aes(y=Bar*sfactor)) 
  scale_y_continuous("Line",
                     sec.axis = sec_axis(trans= ~. /sfactor, name = "Bar"))
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Идеально! Еще один запрос: как пометить столбики? Добавление > geom_text(aes(label= Bar)), похоже, не работает. Большое спасибо

2. @wellokay затем я бы посоветовал вам добавить метки после каждой геометрии вот так: geom_col(aes(y=Bar*sfactor)) geom_text(aes(y=Bar*sfactor,label=Bar)) !