ggplot geom_linerange 中的 Alpha 由 Mac 上的观察次数决定
Alpha in ggplot geom_linerange determined by number of observations on Mac
我正在使用 geom_linerange 函数绘制一些数据。这是 5-10 年的日常观察,具体取决于数据集。
当 运行 我的 Mac 上的脚本时,线性范围 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 上的预期行为,还是我做错了什么?
非常感谢!
这是您的 high-frequency 数据与您的图形设备交互作用的结果,尤其是它的 anti-aliasing setting/capability。在这种情况下,我们试图使用(在我下面的示例中)仅约 600 像素的绘图宽度来绘制大约 2,900 天的数据。每个像素代表大约 4 天的数据,抗锯齿使外观更“模糊”,而没有抗锯齿的绘图显示数据范围更好(以显示较少数据为代价;我猜我们有效地看到每四天的数据)。
在 Windows 中,我相信 Plot window 的默认图形设备是 Quartz,没有抗锯齿。 Plot1+Plot2 在该设置下看起来像这样:
如果我在 RStudio 全局设置中启用抗锯齿,我得到的结果类似于您的 Mac 结果,因为它的默认图形设备使用抗锯齿。
获得所需内容的最简单方法是将分辨率提高到足以让每天至少有一个像素;这样您就可以表示 100% 的数据并使用整个范围的色标。您还可以输出为矢量格式,如 svg
以获得更高的有效分辨率。
或者,根据您的数据的性质和您要显示的内容,您可能会在您的日子里取一个滚动平均值(我希望结果类似于抗锯齿输出),或者抓取一个滚动max 或 min 或 SD,或其他一些更直接地捕获您想要的内容的摘要度量,但时间粒度更易于消化。您还可以考虑其他几何图形(如折线图、散点图或 horizon 图),它们更容易让 reader 映射到值。
我正在使用 geom_linerange 函数绘制一些数据。这是 5-10 年的日常观察,具体取决于数据集。
当 运行 我的 Mac 上的脚本时,线性范围 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 上的预期行为,还是我做错了什么?
非常感谢!
这是您的 high-frequency 数据与您的图形设备交互作用的结果,尤其是它的 anti-aliasing setting/capability。在这种情况下,我们试图使用(在我下面的示例中)仅约 600 像素的绘图宽度来绘制大约 2,900 天的数据。每个像素代表大约 4 天的数据,抗锯齿使外观更“模糊”,而没有抗锯齿的绘图显示数据范围更好(以显示较少数据为代价;我猜我们有效地看到每四天的数据)。
在 Windows 中,我相信 Plot window 的默认图形设备是 Quartz,没有抗锯齿。 Plot1+Plot2 在该设置下看起来像这样:
如果我在 RStudio 全局设置中启用抗锯齿,我得到的结果类似于您的 Mac 结果,因为它的默认图形设备使用抗锯齿。
获得所需内容的最简单方法是将分辨率提高到足以让每天至少有一个像素;这样您就可以表示 100% 的数据并使用整个范围的色标。您还可以输出为矢量格式,如 svg
以获得更高的有效分辨率。
或者,根据您的数据的性质和您要显示的内容,您可能会在您的日子里取一个滚动平均值(我希望结果类似于抗锯齿输出),或者抓取一个滚动max 或 min 或 SD,或其他一些更直接地捕获您想要的内容的摘要度量,但时间粒度更易于消化。您还可以考虑其他几何图形(如折线图、散点图或 horizon 图),它们更容易让 reader 映射到值。