【发布时间】:2014-12-03 23:18:36
【问题描述】:
我通过使用 spplot 覆盖多边形创建了一个地图,并将填充的 alpha 值设置为 10/255,这样多边形重叠的区域具有更饱和的颜色。基于属性表中的二进制变量,多边形被设置为两种不同的颜色(蓝色和红色)。因此,虽然颜色饱和度取决于重叠的多边形数量,但 颜色 取决于多边形的蓝色和红色类别的比例。
当然,没有简单的内置图例,所以我需要从头开始创建一个。在here 找到的基本图形中有一个很好的解决方案。我还根据 kohske 的 this 帖子在 ggplot 中提出了一个不太好的技巧。 here 发布了一个类似的问题,我尽我所能提供了一些解决方案,但无法真正给出可靠的答案。现在我需要为自己做同样的事情,但我特别想使用 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) 我不知道如何在使用spplot 创建的lattice 地图上覆盖ggplot 对象。我尝试使用 ggplotGrob(p) 创建一个 grob,但仍然不知道如何将 grob 添加到 spplot 映射。
理想的解决方案是使用lattice 图形创建一个类似的图形。我认为使用瓷砖可能是正确的解决方案,但最好是让 alpha 值保持不变,并改变从左到右(红色)和从下到上(蓝色)绘制的瓷砖数量。因此,颜色和饱和度应该与地图正确匹配(我认为...)。
非常感谢任何帮助!
【问题讨论】:
标签: r ggplot2 alpha lattice sp