如何处理R透视图的暗区

use*_*626 3 3d plot r

persp()在R里面的函数有一个非常奇怪的问题.我正在使用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()
Run Code Online (Sandbox Code Playgroud)

查看生成的PDF,表面看起来很暗,尤其是在左侧.当我打印文件时,它们看起来更暗(太暗).

我还附上了RStudio中3个地块之一的情节缩放截图.看起来好多了.我希望所有三个情节看起来都像RStudio中的情节放大,即使在打印时也是如此.

有谁知道这是怎么做到的吗?

干杯!

暗

在此输入图像描述

eip*_*i10 8

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

在此输入图像描述

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

  1. 减小线宽以获得更精细的网格线.这将增加蓝色方块的相对面积,使整个表面看起来更亮,并且由于浅视角的结果,由于网格线的"聚集",将特别减少远角处的变暗.

    persp(u,v,z, ticktype="detailed", col = rgb(0.2,0.6,1), lwd=0.5)
    
    Run Code Online (Sandbox Code Playgroud)

    我发现该pdf设备似乎没有对该lwd参数起作用,但cairo_pdf设备确实如此(尽管网格线仍然比它们出现在RStudio图形窗口中更粗).lwd=0.5适用于在RStudio图形窗口中查看(以及输出到png文件).对于cairo_pdf输出,lwd=0.1导致线条比默认线宽更细,但不如我想要的那么薄.但是,当我将线宽设置为低于0.07时,根本没有绘图.这是与上面相同的情节,但线宽设置为0.1并使用RStudio的PDF输出:

    在此输入图像描述

  2. 通过byseq函数中使用更大的值来减少网格线的数量.

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

  4. 为网格线使用较浅的颜色(例如,设置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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述