【问题标题】:How to set the alpha based on a column?如何根据列设置 alpha?
【发布时间】:2018-06-14 19:32:14
【问题描述】:

考虑这个例子:

library(dplyr)
library(sf)
library(tmap)

d <- data_frame(one = c(1,1,2,1,1,1,1),
                two = c(1,1,2,1,1,1,1))

std <- st_as_sf(d, coords = c('one', 'two'))

std %>% tm_shape() + tm_bubbles(alpha = 0.3)

您可以看到(1, 1) 的点较暗,因为它在数据中出现了 6 次。因此,感谢alpha 混合,这些点加起来了。

我的问题是我无法将数据集存储为它。我所拥有的只是一个聚合版本,比如

d_agg <- d %>% group_by(one, two) %>% 
  summarize(count = n()) %>% 
  ungroup()

# A tibble: 2 x 3
    one   two count
  <dbl> <dbl> <int>
1     1     1     6
2     2     2     1

如何使用d_agg 和相应的count 变量重现与以前完全相同的图表?

当然,重新创建上面的初始数据框是不可行的解决方案,因为我的点太多(而且有些点重复了太多次)

只是使用:

std_agg %>% tm_shape() + tm_bubbles(col = 'count', alpha = 0.3)

没用

【问题讨论】:

  • 请同时添加您在代码中使用的包
  • 您可以使用rep rows n 次重新创建原始数据框吗?
  • 不,那太大了。这就是问题所在。
  • 我在想也许你可以用grey100 分配count == 1 然后根据count 减去100 以创建更深的颜色`例如color &lt;- ifelse(count == 1, "grey100", paste0("grey", (100 - count + 1)))
  • 我对@9​​87654338@ 包的了解不够多,无法给出完整的答案。我在想,必须可以逐行获取 agg 数据,展开然后绘制到变量(列表)中,然后继续附加以下行。最后绘制该列表。这样我们只会扩展每个组的数据,而不是一次扩展所有组。

标签: r sp sf tmap


【解决方案1】:

不幸的是,阿尔法(还)不是美学,所以不可能做到alpha = "count"

我的问题:你真的需要 alpha 吗?如果您不使用颜色美学,可能不会。在这种情况下,您使用颜色来模拟 Alpha 透明度的方法实际上很好,但只需要一点配置:

std_agg %>% tm_shape() + tm_bubbles(col = 'count', style = "cont", 
    palette =  "Greys", contrast = c(.3, .7), legend.col.show = FALSE)

【讨论】:

  • 谢谢!我想知道在这种情况下如何使用像viridis:magma 这样的调色板?
  • tmap 的 github 版本(即将在 CRAN 上成为 tmap 2.0)原生支持 viridis 调色板:palette = "magma"。对于 tmap 1.x,只需使用 palette = viridis:magma(10)
  • 谢谢,但在这种情况下,为什么是 10 而不是 100 或 1?我不明白这是如何映射到上面的数据的
【解决方案2】:

这里我将展示如何使用dplyr 重新创建您的数据框d。虽然它没有解决您关于如何将数值传递给 tm_bubbles 中的 alpha 参数的问题,但可以将其视为一种解决方法。

std_agg <- d_agg %>% 
  slice(rep(row_number(), times = count)) %>%
  st_as_sf(coords = c('one', 'two'))

std_agg %>% 
  tm_shape() + 
  tm_bubbles(alpha = 0.3)

其实这个base R来扩展数据框可能更直观。

d_agg[rep(1:nrow(d_agg), times = d_agg$count), ]

【讨论】:

  • 我很感激,但这不起作用,因为结果数据集太大
  • @ℕʘʘḆḽḘ 我知道。这只是一种解决方法。等等看有没有tmap的专家可以帮忙。
猜你喜欢
  • 1970-01-01
  • 2020-01-30
  • 2019-10-15
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2010-11-24
相关资源
最近更新 更多