Как контролировать ylim для граненого графика с разными масштабами в ggplot2? - PullRequest
23 голосов
/ 05 ноября 2010

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 06 ноября 2010

Это было , недавно появившееся в списке рассылки ggplot2 .То, о чем вы просите, в настоящее время невозможно, но я думаю, что это происходит.

5 голосов
/ 04 февраля 2015

Насколько я знаю, это еще не было реализовано в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...