Добавить дополнительный интервал между подмножеством графиков - PullRequest
11 голосов
/ 03 сентября 2010

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

Вот пример кода:

a = rnorm(100,100,10)
b = rnorm(100,100,10)

par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(2,2,2,2))
hist(a)
hist(b)
plot(a,b)
plot(a,b)
plot(a,b)
plot(a,b)

Вот что выводит этот код:


alt text


Вот что я хотел бы вывести (я изменил это изображение во внешнем редакторе). Обратите внимание на дополнительное пространство между верхним и нижним рядами.


alt text


Ответы [ 3 ]

9 голосов
/ 03 сентября 2010

Функция layout() - ваш друг.Например, вы можете определить матрицу графика

1 2
3 4
5 6
7 8

, а затем поместить пустые графики для третьего и четвертого.Или просто придерживайтесь шести и позвоните par, чтобы добавить дополнительный интервал внизу.

8 голосов
/ 03 сентября 2010

Я могу придумать три способа:

1) Использовать графический параметр mar для установки поля печати

Вы можете получить текущие поля с помощью

currmar <- par()$mar

Вы можете установить новые поля с помощью

par("mar"=c(5, 4, 4, 2))

, для которых номера будут иметь нижнее, левое, верхнее и правое поля (см. ?par)

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

2) Использовать макет для создания сетки неравномерного макета (см. ?layout для примеров)

3) Сохранитьпостроите график в формате .svg или .pdf, а затем используйте Inkscape (или любое другое программное обеспечение) для перемещения графиков.

4 голосов
/ 03 сентября 2010

Я думаю, что пойти с mar - это то, как я бы это сделал.Однако, похоже, вы хотите, чтобы все графики были одинаковыми.Поэтому вам нужно, чтобы на каждом графике сверху и снизу было снято одинаковое количество по mar.
В вашем случае можно использовать следующие числа:
1. строка: par(mar=c(7,4,4,2))
2. строка: par(mar=c(5,4,6,2))
3. строка: par(mar=c(7,4,4,2))

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

...