Коробчатая диаграмма и линия с двойной осью Y из двух фреймов данных с использованием ggplot в R

Я использую ggplot, чтобы поместить график и линию в один и тот же сюжет. У меня есть два фрейма данных, вот фрагменты для этих двух DF:

 TMA.core variable    value
1      I-5      H&E 356642.6
2      B-1      H&E 490276.9
3      B-13      H&E 460831.8
4      L-11      H&E 551614.2
5      B-6      H&E 663711.8
6      F-10      H&E 596832.8

(есть много переменных.)

    TMA.core     Mean        CoV
   I-5 390829.7 0.15181577
   B-1 414909.9 0.21738852
   B-13 500829.8 0.39049256
   L-11 537229.7 0.07387486
   B-6 575698.9 0.44764127
   F-10 589245.2 0.15382864

Я хочу нарисовать коробчатую диаграмму, используя первый фрейм данных, а затем построить CoV для соответствующего ядра TMA и подключиться с помощью geom_line. Мои коды:

ggplot() +
geom_boxplot(data = Merge_stats_melt, aes(x = reorder(TMA.core, value, FUN = mean), y = value)) + 
geom_line(data = Merge_stas_mean_order, aes(x = reorder(TMA.core, Mean), y = CoV, group = 1)) + 
scale_y_continuous(
# Add a second axis and specify its features
sec.axis = sec_axis(~./1000000, name = 'CoV')
) 

Используя эти коды, я могу нарисовать коробчатую диаграмму, но линия всегда является горизонтальной линией при y = 0. Как решить эту проблему? введите здесь описание изображения


person DigiPath    schedule 03.06.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как построить комбинированный линейчатый и линейный график в ggplot2   -  person Ian Campbell    schedule 03.06.2020
comment
В этом ответе все еще используется один фрейм данных, но я использую два   -  person DigiPath    schedule 03.06.2020


Ответы (1)


Использование одного или двух фреймов данных не имеет особого значения. Просто не забудьте соответствующим образом отрегулировать эстетику y, которую вы забыли сделать.

library(ggplot2)
library(scales)

Найдите идеальный коэффициент масштабирования для двойной оси

ratio <- max(Merge_stats_melt$value) / max(Merge_stas_mean_order$CoV)

ggplot() +
  geom_boxplot(data = Merge_stats_melt, aes(x = reorder(TMA.core, value, FUN = mean), y = value)) + 
  geom_line(data = Merge_stas_mean_order, aes(x = reorder(TMA.core, Mean), y = CoV*ratio, group = 1)) + 
  scale_y_continuous(labels=comma,
    sec.axis = sec_axis(~./ratio, name = 'CoV')
  ) 

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

person Edward    schedule 03.06.2020