ggplot2: qplot не масштабирует ось фасета при сохранении сетки

#r #plot #ggplot2

#r #график #ggplot2

Вопрос:

У меня есть следующий сюжет (заимствованный из http://www.statmethods.net/advgraphs/ggplot2.html ):

график с фасетом и фиксированной осью

Создается следующим кодом:

 library(ggplot2) 

# create factors with value labels 
mtcars$gear <- factor(mtcars$gear,levels=c(3,4,5),
                      labels=c("3gears","4gears","5gears")) 
mtcars$am <- factor(mtcars$am,levels=c(0,1),
                    labels=c("Automatic","Manual")) 
mtcars$cyl <- factor(mtcars$cyl,levels=c(4,6,8),
                     labels=c("4cyl","6cyl","8cyl")) 

q <- qplot(hp, mpg, data=mtcars, shape=am, color=am, size=I(3), facets=gear~cyl,
      xlab="Horsepower", ylab="Miles per Gallon")
print(q)
 

Теперь я бы хотел, чтобы ось «лучше масштабировалась». Например, ось колонны с 3 шестернями может быть масштабирована в диапазоне от 10 до 25. Однако я все еще хочу сохранить сетку cyl-gears, и мне нужна только одна шкала на столбец.

Итак, следующее не соответствует моим ожиданиям:

 q <- qplot(hp, mpg, data=mtcars, shape=am, color=am, size=I(3),
      xlab="Horsepower", ylab="Miles per Gallon")
q <- q   facet_wrap(facets=gear~cyl, scales="free_y")
print(q)
 

участок с фасетом и разрушенной сеткой

Есть ли способ добиться этого с помощью ggplot2?

Ответ №1:

Если вам нужна только одна шкала для каждого столбца или строки, то вам следует использовать facet_grid() вместо facet_wrap() , потому что для facet_wrap() каждого фасета с scales="free" обрабатывается независимо и просто выравнивается по заданному вами количеству столбцов.

 qplot(hp, mpg, data=mtcars, shape=am, color=am, size=I(3),
           xlab="Horsepower", ylab="Miles per Gallon")   
           facet_grid(facets=gear~cyl, scales="free_y")
 

решение