使用透明色时不一致的多边形行为

3

最近我尝试绘制一个部分透明的多边形(这是我过去经常做的事情),但发现在某些情况下,多边形填充颜色无法绘制。

运行以下代码,第三和第四个多边形将工作正常,但前两个不会(如果你将border从NULL改为颜色,则边框会正常绘制,但填充不会)。

var1 = c(10.13981, 11.47067, 11.07515, 11.32449, 11.57041, 11.75539, 10.81107, 10.90303, 10.47502,
         10.90169, 11.38179, 10.05446, 10.72442, 10.68973, 12.31730, 13.16385, 12.02199, 10.91423,
         11.54465, 10.80909)

var2 = c(116.0, 100.0, 117.0, 116.0, 112.0, 125.5, 110.0, 103.0,  94.0, 105.0, 97.0, 131.0, 108.5,  95.0, 96.0,  78.0,  89.0, 103.0,  99.0,  90.0)

plot(var2~var1)

#What I want to draw
polygon(
  x = c(seq(9,15,0.1), rev(seq(9,15,0.1))),
  y = c(rep(120,61), rep(100,61)),
  col = adjustcolor(col = 'grey', alpha.f = 0.5),
  border = NA
)

#checking if replacing "adjustcolor" with the output of the function works
polygon(
  x = c(seq(9,15,0.1), rev(seq(9,15,0.1))),
  y = c(rep(120,61), rep(100,61)),
  col = "#BEBEBE1A",
  border = NA
)

#works just fine if alpha.f is set to 1 (fully opaque)
polygon(
  x = c(seq(9,15,0.1), rev(seq(9,15,0.1))),
  y = c(rep(120,61), rep(100,61)),
  col = adjustcolor(col = 'grey', alpha.f = 1),
  border = NA
)

#works just fine with transparency using different x/y values
polygon(
  x = c(11,11,12,12),
  y = c(110,120,120,110),
  col = adjustcolor(col = 'grey', alpha.f = .1),
  border = NA
)

实际上,一些 x/y 变量和 alpha.f 值的特定组合会导致多边形填充无法正常工作。

这对我来说完全没有意义。我错过了什么明显的吗?这让我发疯。

添加使用不同多边形代码的输出屏幕截图(将所有边框更改为“黑色”):

#1输入图像说明

#2 输入图像说明

#3输入图像说明

#4输入图像说明


我已经测试过了,更改了边框和填充颜色,所有多边形都被正确地绘制出来了。你能添加一张绘图的截图吗? - Marco_CH
编辑以添加所有4个多边形版本的截图。 - C. Denney
谢谢。我已经成功重现了这个问题,并发现只有在本地的R中才会出现这个问题。在我的RStudio服务器上,图表显示正常。我无法解决它,但也许这些信息可以帮助其他人找出问题所在。编辑:在这里,它也可以正常工作:https://www.tutorialspoint.com/execute_r_online.php - Marco_CH
你的建议让我尝试了各种绘图导出方式。使用png()和jpeg()仍然不起作用,但是使用pdf()可以,所以看起来可能是图形设备的问题? - C. Denney
2个回答

1
发现这是一个只在Windows系统下出现的bug,如果多边形比图表大。

链接: 与此同时,您可以采取一个解决方法:
var1 = c(10.13981, 11.47067, 11.07515, 11.32449, 11.57041, 11.75539, 10.81107, 10.90303, 10.47502,
         10.90169, 11.38179, 10.05446, 10.72442, 10.68973, 12.31730, 13.16385, 12.02199, 10.91423,
         11.54465, 10.80909)

var2 = c(116.0, 100.0, 117.0, 116.0, 112.0, 125.5, 110.0, 103.0,  94.0, 105.0, 97.0, 131.0, 108.5,  95.0, 96.0,  78.0,  89.0, 103.0,  99.0,  90.0)

par(mfrow=c(2,2))
plot(var2~var1)


polygon(
  x = c(seq(min(var1),max(var1),0.1), rev(seq(min(var1),max(var1),0.1))),
  y = c(rep(120, length(seq(min(var1),max(var1),0.1))), rep(100,length(seq(min(var1),max(var1),0.1)))),
  col = adjustcolor(col = 'grey', alpha.f = 0.5),
  border=NA
)

输出: 在此输入图片描述 编辑:哦,我刚意识到你也找到了错误描述。

1
在搜索R页面即将到来的更改时,发现当多边形以半透明填充方式绘制在Windows图形设备的绘图区域外部时,这是一个已知的错误。它被标记为“已修复”,但显然尚未实施。希望这很快就会解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接