3

考虑这个例子:

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)

不工作

在此处输入图像描述

4

2 回答 2

3

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

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

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

在此处输入图像描述

于 2018-06-15T07:38:54.090 回答
1

在这里,我展示了如何d使用dplyr. 尽管它没有解决您关于如何将数值传递给 in 中的alpha参数的问题tm_bubbles,但将其视为一种解决方法。

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), ]
于 2018-06-14T19:56:56.500 回答