ggplot alpha级别在点的填充和边界上显示不同(响亮的人工制品)

时间:2016-05-23 02:09:08

标签: r ggplot2 transparency visualization alpha

我正在使用ggplot为所有点绘制具有恒定透明度值的许多点。

我发现圆形点的填充比单个边框更加透明,因此边框明显比填充更明亮(我在黑暗的背景上绘制光圈),即似乎是一个响亮的人工制品。

The effect is that they look like rings rather than semi-transparent circles.

library(ggplot2)
set.seed(123)
data <- data.frame( x = sample(1:100,2000, replace=T), 
                    y = sample(1:100,2000, replace=T) )
ggplot(data, aes(x,y)) + 
  geom_point(alpha=0.2, color="dodgerblue", fill="dodgerblue", size=4) +
  theme(panel.background = element_rect(fill = 'black', colour = 'black'))

我不确定为什么会这样做,所以关于为什么会发生这种情况的信息会很棒。

可能的解决方案是制作边框并填充相同的透明度,或使边框100%透明(设置边框,例如背景颜色,会在点重叠时破坏视觉效果)。我不确定如何做到这些。

3 个答案:

答案 0 :(得分:3)

将笔划更改为0似乎有理想的结果:

ggplot(data, aes(x,y)) + 
  geom_point(alpha=0.2, colour="dodgerblue", fill=mycol, stroke=0,  size=5) +
  theme(panel.background = element_rect(fill = 'black', colour = 'black'))

答案 1 :(得分:3)

鉴于您希望磁盘具有恒定的颜色和不透明度最简单的事情就是为我修复它,同样在RStudio情节预览窗口中只是使用选项data <- data.frame( x = sample(1:100,2000, replace=T), y = sample(1:100,2000, replace=T) ) ggplot(d, aes(x,y)) + geom_point(alpha=0.2, color="dodgerblue", size=5, shape=16) + theme(panel.background = element_rect(fill = 'black', colour = 'black'))

shape=21

http://jsfiddle.net/fh1hj690/

或者,fill=adjustcolor("dodgerblue",alpha.f=0)和100%半透明填充 ggplot(data, aes(x,y)) + geom_point(alpha=0.2, fill=adjustcolor("dodgerblue",alpha.f=0), size=5, shape=21) + theme(panel.background = element_rect(fill = 'black', colour = 'black')) 也有效:

stroke=0

enter image description here

根据当前接受的答案中的建议使用ggplot(data, aes(x,y)) + geom_point(alpha=0.2, colour="dodgerblue", fill="dodgerblue", stroke=0, size=5) + theme(panel.background = element_rect(fill = 'black', colour = 'black')) 似乎并不能完全解决问题(响铃效果稍微消失但不完全,至少在Windows上):

{{1}}

enter image description here

答案 2 :(得分:1)

更新: Tom Wenseleers解决方案(已接受)优于以下解决方案。

在与@ 42讨论之后,解决方案是PNG默认的分辨率足够低,以至于在标记和图像背景之间的边界处存在混合工件(可能不是正确的术语)。

增加dpi可以解决问题,添加stroke=0看起来会更好。

ggsave("plot.png",
  ggplot(data, aes(x,y)) + 
  geom_point(alpha=0.2, color="dodgerblue", fill="dodgerblue", size=4, stroke=0) +
  theme(panel.background = element_rect(fill = 'black', colour = 'black')),
  dpi=1200)