2016-01-14 4 views
2

У меня возникают проблемы с попыткой автоматического создания составных фигур в R с различным количеством панелей. Когда у меня есть 3 или более панелей на моей фигуре, поля значительно отличаются (меньше на графике 1x3), что достаточно, чтобы заставить R неправильно нарисовать метки и отвлечь их от общего вида.R: layout() влияет на размер маржи в областях участка

# plot empty plot with box around plot and figure 
plot_box <- function() { 
     plot(1, 1, type='n', bty='n', xaxt='n', yaxt='n', xlab='', ylab='') 
     box(lwd = 6) 
     box("figure", lwd=6, col='red') 
} 

png("box_test1.png", width=1000, height=500) 
par(oma=c(0,0,0,0)) 
layout(t(1:2)) 
par(mar=c(3, 3, 3, 3)) 
plot_box() 
par(mar=c(3, 3, 3, 3)) 
plot_box() 
dev.off() 

box_test1.png

png("box_test2.png", width=1500, height=500) 
par(oma=c(0,0,0,0)) 
layout(t(1:3)) 
par(mar=c(3, 3, 3, 3)) 
plot_box() 
par(mar=c(3, 3, 3, 3)) 
plot_box() 
par(mar=c(3, 3, 3, 3)) 
plot_box() 
dev.off() 

box_test2.png

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

Эта проблема очень запутанна для меня и, честно говоря, выглядит как ошибка, однако я знаю, что код построения R очень зрелый, поэтому я надеюсь на решение.

+0

Почему она должна быть обязательно ошибка? Кроме того, посмотрите на пакеты 'решетка' и' ggplot2'. –

+0

Я знаю о других пакетах построения, но я использую базовую графику для создания моих графиков (в основном image() на больших массивах). Я говорю об ошибке, потому что поля указаны как кратность строк текста, которые должны быть инвариантными к общему размеру графика (очевидно, пропорции будут меняться). – mgperry

ответ

3

Вы устанавливаете маржу с использованием mar, что соответствует линиям, то есть хорошо, сложно управлять должным образом.

‘mar’ A numerical vector of the form ‘c(bottom, left, top, right)’ 
     which gives the number of lines of margin to be specified on 
     the four sides of the plot. The default is ‘c(5, 4, 4, 2) + 
     0.1’. 

Если вы используете mai вместо этого, вы получите согласованный физический размер.

‘mai’ A numerical vector of the form ‘c(bottom, left, top, right)’ 
     which gives the margin size specified in inches. 

Смотрите также этот бит пар:?

The meaning of ‘character size’ is not well-defined: this is set 
up for the device taking ‘pointsize’ into account but often not 
the actual font family in use. Internally the corresponding pars 
(‘cra’, ‘cin’, ‘cxy’ and ‘csi’) are used only to set the 
inter-line spacing used to convert ‘mar’ and ‘oma’ to physical 
margins. (The same inter-line spacing multiplied by ‘lheight’ is 
used for multi-line strings in ‘text’ and ‘strheight’.) 
Смежные вопросы