2017-02-22 36 views
5

После установки графических параметров с par(fig) и сброса их с исходными параметрами текст на полях графиков не записывается. Только после другой команды низкого уровня внутри выполняется область печати, она будет работать снова. Вот пример:после пар (рис.), Текст в полях не записан

dev.off() 
plot(1:10) 
op <- par(no.readonly = TRUE) 
mtext("hello", adj=1, col=2)   # written as expected 
par(fig=c(0.1,0.6,0.5,0.8), new=TRUE) 
par(op) 
mtext("hello ", adj=1, col=3)   # not written 
mtext("hello ", adj=1, col=3, line=-1) # works inside plot region 
mtext("hello ", adj=1, col=3)   # still not written 
text(50,20,"") # or abline    # do something inside plot region 
mtext("hello   ", adj=1, col=3) # now it works! 

Это может быть связано с другим вопросом я отправил под after par(fig), mtext is slightly off.

Кроме mtext, axis также не работает. Кроме того, решается проблема text/abline/points, title(main="dummy").

Это может быть ошибка R? Или я чего-то не хватает?

+0

Я подозреваю, что 'par (op)' запускает новый сюжет. Замените 'par (op)' на 'par (fig = op $ fig, new = TRUE)' и работает как и ожидалось. –

+0

Теперь это интересно! 'par (fig = op $ fig)' достаточно без 'new', btw .. Это не объясняет, почему он работает в области построения графика, но не в поле, хотя ... –

ответ

5

Путем проб и ошибок, оно сводится к par(mfg=c(1, 1, 1, 1)).

plot(1:10) 
op <- par(no.readonly = TRUE) 
mtext("hello", adj=1, col=2)   # written as expected 
par(op[names(op) == "mfg"]) 
mtext("bye ", adj=1, col=3)   # not written 
mtext("hello ", adj=1, col=3, line=-1) # works inside plot region 

plot(1:10) 
op <- par(no.readonly = TRUE) 
mtext("hello", adj=1, col=2)   # written as expected 
par(op[names(op) != "mfg"]) 
mtext("bye ", adj=1, col=3)   # written as expected 
mtext("hello ", adj=1, col=3, line=-1) # works inside plot region 

Это мне не понятно, почему установка фигуры, предназначенных для печати следующего следует отключить печать текста на полях (но не на рисунке), и так как mtext реализуется в C, то потребуется некоторое усилие, чтобы работать это из.