我通过使用 spplot 覆盖多边形并将填充的 alpha 值设置为 10/255 创建了一个地图,这样多边形重叠的区域具有更饱和的颜色。基于属性表中的二进制变量,多边形被设置为两种不同的颜色(蓝色和红色)。因此,虽然颜色饱和度取决于重叠的多边形数量,但颜色取决于多边形的蓝色和红色类别的比率。
当然,没有简单的内置图例,所以我需要从头开始创建一个。在此处找到的基本图形中有一个很好的解决方案。根据 kohske 的这篇文章,我还想出了一个不太好的方法来在 ggplot 中执行此操作。此处发布了一个类似的问题,我尽力提供了一些解决方案,但无法真正提出可靠的答案。现在我需要为自己做同样的事情,但我特别想使用 R 并使用grid
图形。
这是我想出的 ggplot hack
Variable_A <- 100 # max of variable
Variable_B <- 100
x <- melt(outer(1:Variable_A, 1:Variable_B)) # set up the data frame to plot from
p <- ggplot(x) + theme_classic() + scale_alpha(range=c(0,0.5), guide="none") +
geom_tile(aes(x=Var1, y=Var2, fill="Variable_A", col.regions="red", alpha=Var1)) +
geom_tile(aes(x=Var1, y=Var2, fill="Variable_B", col.regions="blue", alpha=Var2)) +
scale_x_continuous(limits = c(0, Variable_A), expand = c(0, 0)) +
scale_y_continuous(limits = c(0, Variable_B), expand = c(0, 0)) +
xlab("Variable_A") + ylab("Variable_B") +
guides(fill=FALSE)
p
这给出了这个:
这对我的目的不起作用,原因有两个。1) 由于 alpha 值不同,绘制的第二种颜色(在本例中为蓝色)会随着 alpha 值的升高而压倒第一种颜色。正确的图例应沿 1:1 对角线均匀混合蓝色和红色。此外,颜色并不能真正正确地对应于地图颜色。2) 我不知道如何在使用创建的地图ggplot
上覆盖对象。我尝试使用 创建一个 grob ,但仍然无法弄清楚如何将 grob 添加到地图中。lattice
spplot
ggplotGrob(p)
spplot
理想的解决方案是使用图形创建类似的lattice
图形。我认为使用瓷砖可能是正确的解决方案,但最好是让 alpha 值保持不变,并改变从左到右(红色)和从下到上(蓝色)绘制的瓷砖数量。因此,颜色和饱和度应该与地图正确匹配(我认为......)。
任何帮助深表感谢!