我一直在尝试使用基本绘图功能制作一些非常小的折线图,但在尝试添加细边框时会出现错误。
这是通过Windows 7上的RGui,从绘图窗口中保存一个png。
这是我的代码:
dev.new(width=1.3,height=0.3)
par(mar=c(0,0,0,0))
set.seed(13)
x <- 1:10
y <- runif(10)
plot(x,y,type="n",xaxs="i",yaxs="i",ylim=c(0,1))
polygon( c(1,x,max(x),0), c(0,y,0,0), col="lightblue", border=NA)
lines(x,y,lwd=1)
一切都很好,直到我尝试添加一个行宽为1的方框,给出:
box(lwd=1)
现在我可以通过将线宽增加到2来解决这个问题,但这看起来有点像黑客。
box(lwd=2)
使用像rect
这样的rect(1,0,10,1)
似乎也没有给我一个合适的解决方案,底边和右边框都不可见。
答案 0 :(得分:1)
您是否考虑过给予mar一个小的非零值:
dev.new(width=0.3,height=0.3)
par(mar=c(0.01,0.01,0.01,0.01))
set.seed(13)
x <- 1:10
y <- runif(10)
plot(x,y,type="n",xaxs="i",yaxs="i",ylim=c(0,1))
polygon( c(1,x,max(x),0), c(0,y,0,0), col="lightblue", border=NA)
lines(x,y,lwd=1)
box(lwd=1)
我承认我还没有弄清楚最终游戏会是什么,但是当我对这个非常小的屏幕对象进行交互式“拉伸”时,它会产生一个全方位的边界。
我确实认识到我在Mac上并将其保存为pdf文件并将其转换为png文件以进行SO包含可能无法在Linux或Windows设备上精确再现。
答案 1 :(得分:1)
grid
和gridBase
包中的另一个解决方案。我们的想法是将box
替换为grid.rect
。
gridBase
获取base
视口这是我的代码:
library(gridBase)
sp <- baseViewports()
vp <- sp$plot
vp$width <- unit(0.999,'npc')
vp$y <- unit(0.001,'npc')
pushViewport(vp)
grid.rect(gp=gpar(fill=NA))
upViewport(1)
编辑感谢@baptiste,您只需使用grid.rect
即可获得相同的结果:
library(grid)
grid.rect(width = unit(0.999,'npc'),
y = unit(0.5001, "npc"),
gp=gpar(fill=NA))
答案 2 :(得分:0)
要回答我自己的问题,感谢@ baptiste的提示,由于RGui,这是一个依赖于设备的问题。如果使用png
将图像直接保存到文件中,则一切都按预期工作。 E.g:
dev.new(width=1.3,height=0.3)
# repeat from here onwards only for png call below
par(mar=c(0,0,0,0))
set.seed(13)
x <- 1:10
y <- runif(10)
plot(x,y,type="n",xaxs="i",yaxs="i",ylim=c(0,1),bty="n")
polygon( c(1,x,max(x),0), c(0,y,0,0), col="lightblue", border=NA)
lines(x,y,lwd=1)
box(lwd=1)
从“R Graphics”窗口保存到png会显示我原来填充的图像:
使用png
直接转到文件,如:
png("textbox_direct.png",width=116,height=27)
# take code block from above
dev.off()
...给出了正确的结果: