【问题标题】:Create a bivariate color gradient legend using lattice for an spplot overlaying polygons with alpha使用 lattice 为带有 alpha 的 spplot 覆盖多边形创建双变量颜色渐变图例
【发布时间】: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


    【解决方案1】:

    如何将角度映射到颜色,并将 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())
    

    【讨论】:

    • 谢谢,mmk。这看起来是一个很好的解决方案,可能。我仍然关心的两件事是:1)这实际上与覆盖的多边形颜色相同吗? ——我想应该。 2)这仍然是一个'ggplot'解决方案,所以结合'格子'图形仍然是一个我不知道如何解决的问题。我会看看我是否可以解决这两个问题,如果没有更好的解决方案,我会接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多