【问题标题】:Coloring the states according to a given variable using ggplot使用 ggplot 根据给定变量为状态着色
【发布时间】:2014-06-04 09:27:14
【问题描述】:

我绘制的地图如下。我需要帮助添加一些额外的图层。我知道有很多方法可以做到这一点,但作为 ggplot 的新手,我真的对此一无所知。任何帮助将不胜感激。谢谢

我已经使用了代码:

shp_state1<-readShapeSpatial("...")
mapindia<-fortify(shp_state1)
q=ggplot(data=mapindia, aes(long, lat, group=group,colour)) +  geom_polygon(fill="#FF9999", colour="black") +coord_map()

现在我有以下数据(作为数据框):

             Row.Labels LATITUDE LONGITUDE MAJORITY
1        Andhra Pradesh 78.30000 17.200001      Yes
2                 ASSAM 91.50000 26.090000       No
3                 Bihar 85.13000 25.370001       No
4            Chandigarh 76.79855 30.744196       No
5          CHHATTISGARH 81.63000 21.230000       No
6  DADRA & NAGAR HAVELI 72.96667 20.266666      Yes
7           DAMAN & DIU 72.80640 20.251890       No
8                 Delhi 72.80640 20.251890       No
9                   GOA 73.96992 15.384293      Yes
10              GUJARAT 72.40000 23.030001       No
11              Haryana 75.95947 29.017748       No
12             Himachal 75.95947 29.017748       No
13            Jharkhand 85.33000 23.350000       No
14            KARNATAKA 75.68481 14.849231      Yes
15               KERALA 76.82739  9.470736      Yes
16          MAHARASHTRA 75.64087 19.590844      Yes
17              MANIPUR 93.58000 24.440001       No
18            MEGHALAYA 91.00000 25.299999       No
19                   MP 93.00000 23.299999       No
20               Odissa 77.21067 28.623932       No
21          PONDICHERRY 79.82803 11.937899       No
22               Punjab 75.50000 30.400000       No
23            Rajasthan 75.52000 26.549999       No
24           TAMIL NADU 88.40000 27.200001      Yes
25              TRIPURA 91.25000 23.500000       No
26                   UP 91.25000 23.500000       No
27           Uttrakhand 78.20000 30.110001       No
28          WEST BENGAL 88.24000 22.340000       No


data <- structure(list(Row.Labels = c("Andhra Pradesh", "ASSAM", "Bihar", 
                  "Chandigarh", "CHHATTISGARH", "DADRA & NAGAR HAVELI", "DAMAN & DIU", 
                  "Delhi", "GOA", "GUJARAT", "Haryana", "Himachal", "Jharkhand", 
                  "KARNATAKA", "KERALA", "MAHARASHTRA", "MANIPUR", "MEGHALAYA", 
                  "MP", "Odissa", "PONDICHERRY", "Punjab", "Rajasthan", "TAMIL NADU", 
                  "TRIPURA", "UP", "Uttrakhand", "WEST BENGAL"), LATITUDE = c(78.3, 
                  91.5, 85.13, 76.79855, 81.63, 72.96667, 72.8064, 72.8064, 73.96992, 
                  72.4, 75.95947, 75.95947, 85.33, 75.68481, 76.82739, 75.64087, 
                  93.58, 91, 93, 77.21067, 79.82803, 75.5, 75.52, 88.4, 91.25, 
                  91.25, 78.2, 88.24), LONGITUDE = c(17.200001, 26.09, 25.370001, 
                  30.744196, 21.23, 20.266666, 20.25189, 20.25189, 15.384293, 23.030001, 
                  29.017748, 29.017748, 23.35, 14.849231, 9.470736, 19.590844, 
                  24.440001, 25.299999, 23.299999, 28.623932, 11.937899, 30.4, 
                  26.549999, 27.200001, 23.5, 23.5, 30.110001, 22.34), MAJORITY = c("Yes", 
                  "No", "No", "No", "No", "Yes", "No", "No", "Yes", "No", "No", 
                  "No", "No", "Yes", "Yes", "Yes", "No", "No", "No", "No", "No", 
                  "No", "No", "Yes", "No", "No", "No", "No")), .Names = c("Row.Labels", 
                  "LATITUDE", "LONGITUDE", "MAJORITY"), class = "data.frame", row.names = c(NA, -28L))

如何根据“是”或“否”为状态着色?

【问题讨论】:

  • 代码在哪里?我会尝试将 MAJORITY 映射到填充美学。
  • 我无法找出映射之外的代码。填充 geom_polygon 的美学?
  • 我相信@lukeA 在问“生成地图的代码在哪里?”。即使使用ggplot,也有很多方法可以绘制地图。还有dput(YOUR_DATA_FRAME_NAME) FTW 与粘贴文本输出。
  • @hrbrmstr 是的,我想补充一下@ user2458552 - 请在问题中提供reproducible example。这将使您充分利用 SO。

标签: r map ggplot2


【解决方案1】:

考虑到您的数据存储在名为data 的数据框中,这是一种方法:

library(raster); library(ggplot2)
india <- getData('GADM', country="IND", level=1) 
f_india <- fortify(india)
i <- sapply(india@data$NAME_1, function(x) agrep(x, data$Row.Labels, max.distance=.3, ignore.case=T)[1]) 
india@data$maj <- data$MAJORITY[i]
f_india <- merge(x=f_india, y=unique(india@data), by.x="id", by.y="ID_1",all.x=T) 
f_india <- f_india[with(f_india, order(id, order)), ] # to prevent this http://stackoverflow.com/questions/24039621/code-not-working-for-other-shp-files
ggplot(f_india, aes(x=long, y=lat, group=group, fill=maj)) + 
  geom_polygon(colour="black") 

您可能需要调整i,它将数据框中的名称与地图数据中的名称联系起来,以将选票纳入地图数据。

【讨论】:

  • 非常感谢。但问题是..我存储变量的数据框,而不是 id s ,我有各州的名称及其经度和纬度
  • 我尝试使用字符串距离将您的姓名与地图数据中的姓名相匹配。要手动匹配,请输入india@data$NAME_1,然后输入data$Row.Labels,现在查看第一个输出中的哪一个与第二个输出匹配,并像i &lt;- c(2, 4, ...) 一样写下来,并替换代码中的i &lt;- 行。跨度>
  • 嘿,非常感谢!它起作用了。我正在编辑问题并输入我使用的代码。
  • 但如果我们使用不同的 shapefile,此代码将无法正常工作。我已更改i,但似乎不起作用..我正在使用来自 [link]geocommons.com/searches?query=india+states(第一个)的 shp 文件
  • 错误信息是什么?你为什么不使用工作的呢? :->
猜你喜欢
  • 1970-01-01
  • 2012-04-07
  • 2011-06-07
  • 1970-01-01
  • 2015-03-10
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多