在Albers Equal Area投影的美国地图中添加DC的未投影星

时间:2018-07-13 17:01:13

标签: r ggplot2 mapping map-projections choropleth

我正在与美国所有州和领地建立合唱团。我想用马里兰州/弗吉尼亚州沿海某处的星星代替华盛顿特区的形状。我使用以下代码生成一个星星,并使用状态名称,顶点等将其添加到我的小标题中。

star <- tribble(
  ~x, ~y, ~order, ~hole, ~piece, ~group, ~id,
  1, 0, 1, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  0.3, -0.2, 2, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  0.3, -0.95, 3, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  -0.1, -0.375, 4, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  -0.8, -0.6, 5,  FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  -0.39, 0, 6,  FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  -0.8, 0.6, 7,  FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  -0.1, 0.375, 8, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  0.3, 0.95, 9, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  0.3, 0.2, 10, FALSE, 1, "Washington, D.C.",  "Washington, D.C.", 
  1, 0, 11, FALSE, 1, "Washington, D.C.",  "Washington, D.C."
) %>%
  # rotate star by multiplying points by rotation matrix
  mutate(long = x * cos(pi / 2) + y * -sin(pi / 2),
         lat = x * sin(pi / 2) + y * cos(pi / 2)) %>%
  # scale the plots big time
  mutate(long = long,
         lat = lat) %>%
  # transpose the plot to near DC
  mutate(long = long - 75,
         lat = lat + 37) %>%
  select(-x, -y)

这实际上有效!不幸的是,当我绘制地图时,由于coord_map(),所以投影了星星。下面是可重现示例的代码:

ggplot(star, aes(long, lat, group = group)) +
  geom_polygon() +
  scale_x_continuous(limits = c(-141, -55)) +
  scale_y_continuous(limits = c(24, 50)) +  
  coord_map(projection = "albers", lat0 = 39, lat1 = 45)

这是完整图中的代码:

ccdf_map %>%
  ggplot() +
  geom_polygon(aes(long, lat, group = group, fill = `Job Search`), color = 
"#ffffff", size = 0.25) +
  geom_text(data = ccdf_labels, aes(long, lat, label = state_abbv), size = 4) +
  scale_x_continuous(limits = c(-141, -55)) +
  scale_y_continuous(limits = c(24, 50)) +
  scale_fill_manual(values = c("#0a4c6a", "#1696d2", "#a2d4ec")) +
  coord_map(projection = "albers", lat0 = 39, lat1 = 45)

enter image description here

我想要一颗星星,这是我的小动作的一部分,因此可以将填充与所有其他状态一起映射为美感。我希望星星投影为coord_equal(),而州投影为Albers等面积圆锥投影。我的想法是即使数据已经存储为相等,也要从Albers投影恒星中的点相等(反向投影),但是我不知道如何对恒星进行此操作,因为它是一个小点而不是形状文件。有什么想法吗?

0 个答案:

没有答案