gpt4 book ai didi

r - ggplot geom_linerange 中的 Alpha 由 Mac 上的观察次数决定

转载 作者:行者123 更新时间:2023-12-05 03:34:59 24 4
gpt4 key购买 nike

我正在使用 geom_linerange 函数绘制一些数据。这是 5-10 年的日常观察,具体取决于数据集。

在我的 Mac 上运行脚本时,线性范围 alpha 会根据每个图中的观察数量发生变化。但是,我希望所有地 block 的 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:

Mac Alpha Plot

下面是我的 Windows 上的输出——如您所见,所有绘图都有 alpha=1:

Windows Alpha Plot

代码通过 GitHub 存储库传输。

不幸的是,我完全不知道为什么会这样。这是 Mac 上的预期行为,还是我做错了什么?

非常感谢!

最佳答案

这是高频数据与图形设备相互作用的结果,尤其是其抗锯齿设置/功能。在这种情况下,我们试图使用(在我下面的示例中)仅约 600 像素的绘图宽度来绘制大约 2,900 天的数据。每个像素代表大约 4 天的数据,抗锯齿使外观更“模糊”,而没有抗锯齿的绘图显示数据范围更好(以显示较少数据为代价;我猜我们有效地看到每四天的数据)。

在 Windows 中,我相信 Plot 窗口的默认图形设备是 Quartz,没有抗锯齿。 Plot1+Plot2 在该设置下看起来像这样:

enter image description here

如果我在 RStudio 全局设置中启用抗锯齿,我得到的结果类似于您的 Mac 结果,因为它的默认图形设备使用抗锯齿。

enter image description here

enter image description here

获得所需内容的最简单方法是将分辨率提高到足以让每天至少有一个像素;这样您就可以表示 100% 的数据并使用整个范围的色标。您还可以输出为矢量格式,如 svg 以获得更高的有效分辨率。

或者,根据您的数据的性质和您要显示的内容,您可能会在您的日子里取一个滚动平均值(我希望结果类似于抗锯齿输出),或者获取一个滚动最大值或min 或 SD,或其他一些更直接地捕获您想要的内容的摘要度量,但时间粒度更易于消化。您还可以考虑其他几何图形(如折线图、散点图或地平线图),它们更容易让读者映射到值。

关于r - ggplot geom_linerange 中的 Alpha 由 Mac 上的观察次数决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69997385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com