如何处理R透视图中的暗区

mnemlml8  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(171)

我在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中的绘图缩放,即使打印出来。
有人知道怎么做吗?
干杯!

jjhzyzn0

jjhzyzn01#

您可以看到网格线在较小版本的图中靠得更近。如果您将使用RStudio的Zoom创建的图表缩小到与其他图表相同的大小,它看起来就像使用pdf设备创建的图表一样暗。问题是,由于在低视角下透视收缩,网格线看起来太近了(例如,图的后角)。如果放大图,可以看到:

以下是一些改进输出的选项:
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输出:

1.通过在seq函数中使用较大的by值来减少网格线的数量。
1.对透视曲面使用较亮的颜色。
1.网格线使用较浅的颜色(例如,在persp函数中设置border="gray40"甚至border="white")。
例如,下面是调用persp的结果,背景颜色稍微亮了一些,网格线变细了,并且是白色而不是黑色:

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

相关问题