【发布时间】:2021-12-28 00:24:31
【问题描述】:
我正在使用 geom_linerange 函数绘制一些数据。这是 5-10 年的每日观察结果,具体取决于数据集。
在我的 Mac 上运行脚本时,linerange alpha 会根据每个图中的观察次数而变化。但是,我希望所有地块都具有 alpha=1。在 geom_linerange 函数中显式设置 alpha 对绘图没有影响 - 当绘制大量观察值时,颜色仍然是透明的。
当我在我的 Windows 笔记本电脑上使用完全相同的脚本时,绘图是正确的,默认 alpha 为 1。
下面是一个最小的工作示例:
library(ggplot2)
library(gridExtra)
df1 = data.frame(name = c("A","B","C"),
Date = rep(seq(as.Date("2010-01-01"),as.Date("2018-01-01"),by=1),each=3),
value = runif(8769,-1,1))
df2 = data.frame(name = c("A","B","C"),
Date = rep(seq(as.Date("2010-01-01"),as.Date("2014-01-01"),by=1),each=3),
value = runif(4386,-1,1))
df3 = data.frame(name = c("A","B","C"),
Date = rep(seq(as.Date("2010-01-01"),as.Date("2011-01-01"),by=1),each=3),
value = runif(1098,-1,1))
Plot1 = ggplot() +
geom_linerange(data=df1,aes(x=name,ymin=Date,ymax=Date+1,colour=value),size=15) +
scale_colour_gradient2(low="red",mid="white",high="blue",midpoint=0,name = "Value") +
theme_bw() +
coord_flip() +
xlab("Driver") +
ylab("")
Plot2 = ggplot() +
geom_linerange(data=df2,aes(x=name,ymin=Date,ymax=Date+1,colour=value),size=15) +
scale_colour_gradient2(low="red",mid="white",high="blue",midpoint=0,name = "Value") +
theme_bw() +
coord_flip() +
xlab("Driver") +
ylab("")
Plot3 = ggplot() +
geom_linerange(data=df3,aes(x=name,ymin=Date,ymax=Date+1,colour=value),size=15) +
scale_colour_gradient2(low="red",mid="white",high="blue",midpoint=0,name = "Value") +
theme_bw() +
coord_flip() +
xlab("Driver") +
ylab("")
grid.arrange(Plot1,Plot2,Plot3)
以下是我 Mac 上的输出。顶部的图,具有最多的观察,具有最低的 alpha:
以下是我的 Windows 上的输出 - 如您所见,所有图的 alpha=1:
代码通过 GitHub repos 传输。
不幸的是,我完全不知道为什么会发生这种情况。这是 Mac 上的预期行为,还是我做错了什么?
非常感谢!
【问题讨论】:
-
我猜这是因为抗锯齿。你有比像素更多的线来绘制它们,所以顶部的图看起来模糊/较低的 alpha,因为你的 mac 设备是抗锯齿的,但你的 windows 绘图引擎(我猜不是 Cairo 或 ragg,默认情况下实现抗锯齿)是不是。获得所需内容的最简单方法可能是以更高分辨率或使用 svg 等矢量设备进行绘图。
-
@JonSpring 解决了!以比 ggsave 默认值(我设置
dpi=1440)更高的分辨率进行绘图会产生所需的正确 alpha。太感谢了。如果您想将此作为答案发布,我可以将其标记为解决方案:)
标签: r windows macos ggplot2 alpha