【问题标题】:How to plot regions in a country, each shaded by some corresponding value如何绘制一个国家/地区的区域,每个区域都被一些相应的值遮蔽
【发布时间】:2016-02-08 06:31:05
【问题描述】:

特别是我在印度有一组不同的地区,每个地区都有一个“市场份额”价值。

regions <- data.frame(Region=c("TELANGANA", "TAMIL NADU", "JAMMU & KASHMIR"), Marketshare=c(.25, .30, .15))
regions
           Region Marketshare
1       TELANGANA        0.25
2      TAMIL NADU        0.30
3 JAMMU & KASHMIR        0.15

我可以使用ggmap real 轻松绘制印度

library(ggmap)
map <- get_map("India", zoom=6, maptype="toner-lite")
ggmap(map)

但是我怎样才能在我的数据集中明确地包含区域并使用列 Marketshare 对它们中的每一个进行着色?

注意:我见过this question and answer,但它似乎对我的需求过于复杂,想知道是否有更简单的方法。

【问题讨论】:

  • 请在此处显示至少 一些 的努力。 SO上有几乎无数的例子展示了如何读取shapefile和制作choropleths。链接到一个过于复杂的 q/a 并不能免除您的一些努力。除了一个关于 SO 的链接之外,您还进行了哪些研究,哪些研究不适用于您相当简单的要求?

标签: r geospatial ggmap


【解决方案1】:

正如 hrbrmstr 所提到的,我认为如果你能展示你所做的一些努力,那就太好了。在这里,我创建了两张地图。第一个是ggmap,另一个是ggplot。在您的示例代码中,您的地图缩放已关闭,以显示您指定的所有三个区域。所以我修改了你的代码。您在地图顶部需要的是您想要的区域的多边形。为了获得它们,您可以使用get_data() 下载数据。然后,您需要对其进行子集化。正如链接的问题所示,您需要通过合并过程才能将marketshare 添加到最终数据框中。我收集了每个区域的 id 并使用marketshare 创建了一个数据框,即footemp 是包含多边形信息以及marketshare 的最终数据框。您将marketshare 用于fill 并绘制地图。

library(raster)
library(ggmap)
library(ggplot2)

### Get India data
india <- getData("GADM", country = "India", level = 2)

map <- get_map("India", zoom = 4, maptype = "toner-lite")
regions <- data.frame(Region=c("Telangana", "Tamil Nadu", "Jammu and Kashmir"), Marketshare=c(.25, .30, .15))

states <- subset(india, NAME_1 %in% regions$Region)

ind1 <- states$ID_2[states$NAME_1 == "Telangana"]
ind2 <- states$ID_2[states$NAME_1 == "Tamil Nadu"]
ind3 <- states$ID_2[states$NAME_1 == "Jammu and Kashmir"]

states <- fortify(states)

foo <- data.frame(id = c(ind1, ind2, ind3),
                  marketshare = rep(regions$Marketshare, times = c(length(ind1), length(ind2), length(ind3))))

temp <- merge(states, foo, by = "id")

ggmap(map) +
geom_map(data = temp, map = temp,
         aes(x = long, y = lat, map_id = id, group = group, fill = marketshare),
         colour = "grey50", size = 0.3) +
theme(legend.position = "none")

或者,您可以使用 ggplot 绘制地图,以便仅显示印度。在这种情况下,您从下载数据india 创建一个数据框。您绘制一次印度,然后在地图顶部绘制特定区域。出于颜色原因,我在这里将marketshare 转换为因子。

india.map <- fortify(india)

ggplot() +
geom_map(data = india.map, map = india.map,
         aes(x = long, y = lat, map_id = id, group = group),
         colour = "grey50", size = 0.3) +
geom_map(data = temp, map = temp,
         aes(x = long, y = lat, map_id = id, group = group, fill = factor(marketshare)),
         colour = "grey50", size = 0.3) +
theme(legend.position = "none")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多