Постройте несколько столбцов с разными масштабами

У меня есть некоторые данные в следующем формате:

Section Env.    Ar.     Width   Length
    A   8.38    8.76    7      36
    B   11.84   13.51   11     57
    C   16.69   16.49   17     87
    D   11.04   11.62   9      44
    E   19.56   16.79   20     106
    F   17.93   21.34   19     98

Мне нужен график с section по оси X и Env. и Ar. по одной оси Y и Width и Length по другой оси Y, так как он имеет другой масштаб. Я знаю, как построить их только по одной оси Y, используя ggplot, но я застрял в том, как это сделать, как я уже упоминал, с двумя разными осями Y. Любая помощь будет оценена.

Спасибо!


person 13554N    schedule 24.06.2017    source источник
comment
rpubs.com/MarkusLoew/226759   -  person Roman    schedule 26.06.2017
comment
Спасибо за ссылку. Но я пробовал это раньше, что не могло помочь.   -  person 13554N    schedule 26.06.2017


Ответы (1)


Как насчет использования этого?

library(tidyverse)
d <- structure(list(Section = structure(1:6, .Label = c("A", "B", 
                 "C", "D", "E", "F"), class = "factor"), Env. = c(8.38, 11.84, 
                  16.69, 11.04, 19.56, 17.93), Ar. = c(8.76, 13.51, 16.49, 11.62, 
                  16.79, 21.34), Width = c(7L, 11L, 17L, 9L, 20L, 19L), Length = c(36L, 
                  57L, 87L, 44L, 106L, 98L)), .Names = c("Section", "Env.", "Ar.", 
                  "Width", "Length"), class = "data.frame", row.names = c(NA, -6L))
d %>% 
  gather(key, value,-Section) %>% 
  ggplot(aes(Section, value, colour=key, group= key)) + 
  geom_line(size=1.1) + geom_point(size=4)+
  scale_y_continuous(name="Env_Ar",
    sec.axis = sec_axis(~., name = "Width_Length"))

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

Вы также можете попробовать использовать разные аспекты с масштабированием "free_y". Это ИМО намного чище и элегантнее.

d %>% 
  gather(key, value,-Section) %>% 
  mutate(group=ifelse(key %in% c("Width","Length"), 2, 1)) %>% 
  ggplot(aes(Section, value, colour=key, group= key)) + 
  geom_line(size=1.1) + geom_point(size=4)+
  facet_wrap(~group, scales = "free_y")

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

Редактировать

Здесь подход для другого масштабирования (в 10 раз выше) правой оси Y

d %>% 
  mutate(Width=Width*10,
         Length=Length*10) %>% 
  gather(key, value,-Section) %>% 
  ggplot(aes(Section, value, colour=key, group= key)) + 
  geom_line(size=1.1) + geom_point(size=4)+
  scale_y_continuous(name="Env_Ar",
                     sec.axis = sec_axis(~.*10, name = "Width_Length"))
person Roman    schedule 27.06.2017
comment
Спасибо за помощь. Но графики первого приближения имеют одинаковые масштабы по оси Y. То, что я ищу, - это иметь две разные шкалы Y-aix на одном графике. - person 13554N; 27.06.2017
comment
Это ясно. Но тогда, как указано в решении (выше приведенной ссылки), вы должны самостоятельно масштабировать значения. Это можно сделать путем умножения, деления или вычитания константы. Я добавил пример в свой ответ. - person Roman; 28.06.2017