我对R.内部的persp()
函数有一个非常奇怪的问题。我使用split.screen()
函数来排列三个图。我在下面制作了一个MWE:
f <- function(x,y) {
return(x*y)
}
u <- seq(0,5, by = 0.1)
v <- seq(0,5, by = 0.1)
z <- outer(u, v, f)
persp(u,v,z, ticktype="detailed", col = rgb(0.2,0.6,1))
pdf("~/Desktop/test.pdf", width = 10, height = 10) # adjust path as necessary
split.screen( figs = c( 2, 1 ) )
split.screen( figs = c( 1, 2 ) )
screen(2)
persp(u,v,z, ticktype="detailed", col = rgb(0.2,0.6,1))
screen(3, new = FALSE)
persp(u,v,z, ticktype="detailed", col = rgb(0.2,0.6,1))
screen(4, new = FALSE)
persp(u,v,z, ticktype="detailed", col = rgb(0.2,0.6,1))
close.screen(all = TRUE)
dev.off()
查看生成的PDF,表面看起来很暗,尤其是在左侧。当我打印文件时,它们看起来更暗(太暗)。
我还附上了RStudio中3个地块之一的情节缩放截图。看起来好多了。我希望所有三个情节看起来都像RStudio中的情节放大,即使在打印时也是如此。
有谁知道怎么做?
干杯!
答案 0 :(得分:8)
在较小版本的情节中,您会看到网格线的效果更加接近。如果缩小使用RStudio创建的图形缩小到与其他图形相同的大小,它看起来就像使用pdf设备创建的图形一样暗。问题是由于在低视角(例如,地块的后角)缩短,网格线看起来太靠近了。如果你放大图,你可以看到这个:
以下是一些改善输出的选项:
缩小线宽以获得更精细的网格线。这将增加蓝色方块的相对面积,使整个表面看起来更亮,并且特别会减少由于“聚拢”而导致的远角变暗。由于浅视角,网格线的数量。
persp(u,v,z, ticktype="detailed", col = rgb(0.2,0.6,1), lwd=0.5)
我发现pdf
设备似乎没有对lwd
参数采取行动,但cairo_pdf
设备确实如此(尽管网格线仍然比它们看起来更厚在RStudio图形窗口中)。 lwd=0.5
适用于在RStudio图形窗口中查看(以及输出到png文件)。对于cairo_pdf输出,lwd=0.1
导致线条比默认线宽更细,但不像我希望的那么薄。但是,当我将线宽设置为低于0.07时,根本没有绘图。这是与上面相同的情节,但线宽设置为0.1并使用RStudio的PDF输出:
在by
函数中使用较大的seq
值,减少网格线的数量。
为透视表面使用更亮的颜色。
为网格线使用较浅的颜色(例如,在border="gray40"
函数中设置border="white"
甚至persp
。
例如,以下是persp
的调用结果。背景颜色更亮一些,网格线更细,是白色而不是黑色:
png("~/persp.png", 500,500)
persp(u,v,z, ticktype="detailed", col=hcl(240,100,80), border="white", lwd=0.5)
dev.off()