如何处理R透视图的暗区

时间:2014-05-29 17:24:42

标签: r plot 3d

我对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中的情节放大,即使在打印时也是如此。

有谁知道怎么做?

干杯!

dark

enter image description here

1 个答案:

答案 0 :(得分:8)

在较小版本的情节中,您会看到网格线的效果更加接近。如果缩小使用RStudio创建的图形缩小到与其他图形相同的大小,它看起来就像使用pdf设备创建的图形一样暗。问题是由于在低视角(例如,地块的后角)缩短,网格线看起来太靠近了。如果你放大图,你可以看到这个:

enter image description here

以下是一些改善输出的选项:

  1. 缩小线宽以获得更精细的网格线。这将增加蓝色方块的相对面积,使整个表面看起来更亮,并且特别会减少由于“聚拢”而导致的远角变暗。由于浅视角,网格线的数量。

    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输出:

    enter image description here

  2. by函数中使用较大的seq值,减少网格线的数量。

  3. 为透视表面使用更亮的颜色。

  4. 为网格线使用较浅的颜色(例如,在border="gray40"函数中设置border="white"甚至persp

  5. 例如,以下是persp的调用结果。背景颜色更亮一些,网格线更细,是白色而不是黑色:

    png("~/persp.png", 500,500)
    persp(u,v,z, ticktype="detailed", col=hcl(240,100,80), border="white", lwd=0.5)
    dev.off()
    

    enter image description here