2

我通过使用 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 添加到地图中。latticespplotggplotGrob(p)spplot

理想的解决方案是使用图形创建类似的lattice图形。我认为使用瓷砖可能是正确的解决方案,但最好是让 alpha 值保持不变,并改变从左到右(红色)和从下到上(蓝色)绘制的瓷砖数量。因此,颜色和饱和度应该与地图正确匹配(我认为......)。

任何帮助深表感谢!

4

1 回答 1

2

如何将角度映射到颜色,并将 alpha 映射到两个变量的总和 - 这是否符合您的要求?

d <- expand.grid(x=1:100, y=1:100)

ggplot(d, aes(x, y, fill=atan(y/x), alpha=x+y)) + 
  geom_tile() + 
  scale_fill_gradient(high="red", low="blue")+
  theme(legend.position="none", panel.background=element_blank())

在此处输入图像描述

于 2014-10-09T23:34:33.510 回答