2017-02-22 15 views
5

Sau khi thiết lập thông số đồ họa với par(fig) và đặt lại chúng với thông số ban đầu, văn bản trong lề của lô không được viết. Chỉ sau một lệnh cấp thấp khác bên trong khu vực vẽ đồ thị được thực hiện sẽ hoạt động trở lại. Dưới đây là ví dụ:sau mệnh (hình), văn bản trong lề không được viết

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! 

Điều này có thể liên quan đến một câu hỏi khác mà tôi đã đăng theo after par(fig), mtext is slightly off.

Bên cạnh đó mtext, axis cũng không hoạt động. Bên cạnh đó text/abline/points, title(main="dummy") cũng giải quyết được vấn đề.

Đây có phải là lỗi R không? Hay tôi đang thiếu một cái gì đó?

+0

Tôi nghi ngờ 'par (op)' bắt đầu một âm mưu mới. Thay thế 'par (op)' bằng 'par (fig = op $ fig, new = TRUE)' và nó hoạt động như mong đợi. –

+0

Điều đó thật thú vị! 'par (fig = op $ fig)' suffices mà không có 'new', btw .. Điều đó không giải thích tại sao nó hoạt động trong khu vực âm mưu nhưng không ở lề, mặc dù ... –

Trả lời

5

Bằng cách dùng thử và báo lỗi, lỗi này giảm xuống 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 

Nó không rõ ràng với tôi lý do tại sao thiết lập các con số này có thể vẽ tiếp theo nên vô hiệu hóa văn bản in ấn ở bên lề (nhưng không phải trong hình vẽ), và kể từ mtext được thực hiện trong C, nó sẽ mất một số nỗ lực để làm việc nó ra.

Các vấn đề liên quan