Регулировка относительного пространства граней (без учета координатного пространства) - PullRequest
5 голосов
/ 17 ноября 2010

У меня есть основной граф и некоторая вторичная информация, которую я хочу получить в другом графике под ним.Огранка отлично работает, за исключением того, что я не знаю, как управлять относительным пространством, используемым одним аспектом по сравнению с другим.Знаю, что space = 'free', но это полезно, только если диапазоны соответствуют желаемому относительному размеру.

Так, например, мне может потребоваться график, где первый фасет занимает 80%, а второй 20%,Вот пример:

data <- rbind(
    data.frame(x=1:500, y=rnorm(500,sd=1), type='A'), 
    data.frame(x=1:500, y=rnorm(500,sd=5), type='B'))
ggplot() + 
    geom_line(aes(x=x, y=y, colour=type), data=data) + 
    facet_grid(type ~ ., scale='free_y')

Приведенное выше создает 2 аспекта одинакового вертикального размера.Добавление в space='free' в функции facet_grid изменяет размеры так, что нижняя грань примерно в 5 раз больше верхней (как и ожидалось).

Предположим, я хочу, чтобы верхняя часть была в 2 раза больше, с тем же набором данных и упорядочением фасетов.Как я могу это сделать?

Является ли единственный способ сделать это с некоторыми хитростями при изменении масштаба набора данных и ручном переопределении меток осей (и если да, то как)?

Как указано ниже, можно использовать области просмотра для визуализации в виде нескольких графиков.Я рассмотрел это и фактически использовал этот подход в прошлом со стандартным графиком и областями просмотра.

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

Ответы [ 2 ]

7 голосов
/ 17 ноября 2010

Для этого вам не нужно использовать фасеты - вы также можете сделать это с помощью функции viewport.

> ratio = 1/3
> v1 = viewport(width=1,height=ratio,y=1-ratio/2)
> v2 = viewport(width=1,height=1-ratio,y=(1-ratio)/2)
> print(qplot(1:10,11:20,geom="point"),vp=v1)
> print(qplot(1:10,11:20,geom="line"),vp=v2)

Соотношение - это отношение верхней панели ко всей странице.Попробуйте также 2/3 и 4/5.

Этот подход может быть уродливым, если ваши легенды или метки осей на двух графиках имеют разные размеры, но для исправления см. Функцию align.plots в ggExtrapackage и ggplot2 Автор заметок Хэдли Викама на эту тему .

alt text


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


См. также этот вопрос по , используяgrid и ggplot2 для создания объединяемых участков, используя R .

2 голосов
/ 17 ноября 2010

Kohske Takahashi опубликовал патч для facet_grid, который позволяет указать относительный размер граней.Смотрите тему:

http://groups.google.com/group/ggplot2/browse_thread/thread/7c5454dcc04bc7b8

Если повезет, мы увидим это в следующей версии ggplot2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...