Подтвердить что ты не робот

Как контролировать илим за граненый сюжет с разной шкалой в ggplot2?

В следующем примере, как мне установить отдельные ylim для каждого из моих граней?

qplot(x, value,  data=df, geom=c("smooth")) + facet_grid(variable ~ ., scale="free_y")

В каждом из фасетов ось y принимает различный диапазон значений, и я хотел бы использовать разные ylim для каждого из фасетов.

По умолчанию ylims слишком длинны для тенденции, которую я хочу видеть.

4b9b3361

Ответ 2

Насколько я знаю, это еще не реализовано в ggplot2. Однако обходной путь - это даст вам ylims, которые превышают то, что автоматически предоставляет ggplot, - это добавить "искусственные данные". Чтобы уменьшить ylims, просто удалите данные, которые вам не нужны. (См. Пример и пример).

Вот пример:

Позвольте просто настроить некоторые фиктивные данные, которые вы хотите построить

df <- data.frame(x=rep(seq(1,2,.1),4),f1=factor(rep(c("a","b"),each=22)),f2=factor(rep(c("x","y"),22)))
df <- within(df,y <- x^2)

Что мы можем построить с помощью линейных графиков

p <- ggplot(df,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")
print(p)

Предположим, что мы хотим, чтобы y начиналось с -10 в первой строке и 0 во второй строке, поэтому мы добавляем точку в (0, -10) к верхнему левому графику и в (0,0) от нижнего левый сюжет:

ylim <- data.frame(x=rep(0,2),y=c(-10,0),f1=factor(c("a","b")),f2=factor(c("x","y")))
dfy <- rbind(df,ylim)

Теперь, ограничивая масштаб x от 1 до 2, добавленные точки не отображаются (предоставляется предупреждение):

p <- ggplot(dfy,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2))
print(p)

То же самое можно было бы использовать для расширения поля выше, добавляя точки с более высокими значениями y при значениях x, которые лежат вне диапазона xlim.

Это не будет работать, если вы хотите уменьшить ylim, и в этом случае подмножество ваших данных будет решением, например, чтобы ограничить верхнюю строку между -10 и 1.5, которую вы могли бы использовать:

p <- ggplot(dfy,aes(x,y))+geom_line(subset=.(y < 1.5 | f1 != "a"))+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2))
print(p)