r - 控制透视网格瓷砖边框颜色
问题描述
我在创建一个看起来完全符合我想要的样子的透视图时遇到了一些麻烦。特别是,我试图让网格根本不可见。如果您查看左侧的图像,您会看到瓷砖之间有微弱的线条。我希望它看起来像正确的图像,没有可见的线条:
我特别想要一个具有graphics::persp
或其他基本 R 功能的解决方案。我对 3rd 方包不感兴趣rgl
。
我通过使用polygon
和指定border
颜色来匹配col
颜色获得了权利。如果我离开border=NA
,polygon
我会得到与 with 相同的结果persp
。但是,它似乎persp
只需要第一个边框值并重新使用它,polygon
这与将颜色与多边形匹配不同。
这是用于生成图像的代码:
nr <- nc <- 10
mx <- matrix(numeric(nr * nc), nr)
par(mai=numeric(4))
col <- gray((row(mx[-1,-1]) * col(mx[-1,-1])/((nr-1)*(nc-1))))
par(mfrow=c(1,3), mai=c(0, 0, .25, 0), pty='s')
persp(
mx, phi=90, theta=0, border=NA, col=col, r=1e9, zlim=c(0,1),
axes=FALSE, box=FALSE
)
title('Persp border=NA')
persp(
mx, phi=90, theta=0, border=col, col=col, r=1e9, zlim=c(0,1),
axes=FALSE, box=FALSE
)
title('Persp border=col')
plot.new()
mxpoly.x <- rbind(
c(row(mx)[-nr, -nc]), c(row(mx)[-1, -nc]), c(row(mx)[-1, -1]),
c(row(mx)[-nr, -1]), NA
)
mxpoly.y <- rbind(
c(col(mx)[-nr, -nc]), c(col(mx)[-1, -nc]), c(col(mx)[-1, -1]),
c(col(mx)[-nr, -1]), NA
)
title('Polygon')
polygon(
((mxpoly.x - 1) / (max(mxpoly.x,na.rm=TRUE) - 1)),
((mxpoly.y - 1) / (max(mxpoly.y,na.rm=TRUE) - 1)),
col=col, border=col
)
解决方案
这看起来像是抗锯齿的结果。绘制每个单元格时,背景是白色的,因此抗锯齿意味着边框像素以较浅的颜色绘制。
在 Mac 上,您可以通过关闭抗锯齿来解决此问题。你的第一个例子给出了
默认情况下,但如果我打开图形设备使用
quartz(antialias = FALSE)
然后运行相同的代码,我得到
关闭抗锯齿可能会导致锯齿状边缘,因此如果它有对角线,这可能不是您真正问题的可接受解决方案。
您可能可以通过使用抗锯齿绘制两次表面来使事情正常工作:第一次将显示边框,第二次可能仍会显示一些东西,但应该显示得更少。但是,persp()
没有add = TRUE
参数,所以第二次画东西可能会很棘手。
如果您不在 Mac 上,则需要阅读有关您正在使用的设备的信息,以了解它是否允许控制抗锯齿。
编辑添加:我尝试将 C 源代码修改persp
为绘制表面 2 或 3 次的函数。绘制两次时边界仍然略微可见,但绘制 3 次后不可见。
推荐阅读
- javascript - 模块外的继承导入语句
- excel - 我需要一个宏,他从下面的许多不同宏中向我询问您需要运行哪个宏
- linux - 连接 ioctl 和驱动程序操作
- git - 如何在“git clone --depth=1”之后获取整个 git 历史记录?
- routes - 使用 strongswan 的连接问题
- java - Java 空指针异常。我的代码有什么错误?
- flutter - 将nox模拟器连接到vs代码
- php - 如何替换撇号
- android - SQLiteDatatBase NullPointerException
- google-apps-script - 谷歌脚本在单元格值匹配时复制数据行