2016-09-02 2 views
1

Я очень новичок в R. Мне удалось создать карту ниже с кодом ниже.окраски полигонов в ggplot2 (R)

Map of Sampled areas in Masai Mara National Reserve

Я хочу, чтобы цвет самых правый многоугольника на карте (обозначаемую «WestTerr» в коде) другой цвет, чем остальные три многоугольников (обозначаемого «Серены» в коде). Я пробовал разные вещи, которые на меня набросились. Кто-нибудь знает, как мне помочь?

library(ggmap) 
library(RgoogleMaps) 
library(foreign) 
library(raster) 
library(sp) 
library(rgeos) 
library(spatstat) 
library(maptools) 
library(rgdal) 
library(ggplot2) 

CenterOfMap <- geocode("-1.4, 35.08") 

MasaiMara <- get_map(c(lon=CenterOfMap$lon, lat=CenterOfMap$lat), zoom = 10, 
        maptype = "roadmap", source = "google") 

MasaiMaraMap <- ggmap(MasaiMara) 

setwd("Territories_Jenna/") 

SouthTerr <- readOGR(".","SouthMCP") 
SouthTerr <- spTransform(SouthTerr, CRS("+proj=longlat +datum=WGS84")) 
fortify(SouthTerr) 

HZTerr <- readOGR(".","HZMCP") 
HZTerr <- spTransform(HZTerr, CRS("+proj=longlat +datum=WGS84")) 
fortify(HZTerr) 

SandHZ <- gUnion(SouthTerr, HZTerr) 
SandHZ <- spTransform(SandHZ, CRS("proj=longlat +datum=WGS84")) 
fortify(SandHZ) 

MapwithSandHZ <- MasaiMaraMap + 
       geom_polygon(aes(x=long, y=lat, group=group), 
           fill = "black", size=.7, color="black", 
           data=SandHZ, alpha=0) 

NorthTerr <- readOGR(".","NorthMCP") 
NorthTerr <- spTransform(NorthTerr, CRS("+proj=longlat +datum=WGS84")) 
fortify(NorthTerr) 

MapwithNorth <- MasaiMaraMap + 
       geom_polygon(aes(x=long, y=lat, group=group), 
          fill = "black", size=.7, color="black", 
          data=NorthTerr, alpha=0) 

Serena <- gUnion(SandHZ, NorthTerr) 
Serena <- spTransform(Serena, CRS("proj=longlat +datum=WGS84")) 
fortify(Serena) 

MapwithSerena <- MasaiMaraMap + 
       geom_polygon(aes(x=long, y=lat, group=group), 
           fill = "black", size=.7, color="black", 
           data=Serena, alpha=0) 

WestTerr <- readOGR(".","WestMCP") 
WestTerr <- spTransform(WestTerr, CRS("+proj=longlat +datum=WGS84")) 
fortify(WestTerr) 

MapwithWest <- MasaiMaraMap + 
       geom_polygon(aes(x=long, y=lat, group=group), 
          fill = "red", size=.7, color="red", 
          data=WestTerr, alpha=0) 

AllTerrs <- gUnion(Serena, WestTerr) 
AllTerrs <- spTransform(AllTerrs, CRS("proj=longlat +datum=WGS84")) 
fortify(AllTerrs) 

MapwithAllTerrs <- MasaiMaraMap + 
        geom_polygon(aes(x=long, y=lat, group=group), 
           fill = "red", size=.7, color="red", 
           data=AllTerrs, alpha=0) 

MapwithAllTerrs 
+0

А какие ошибки вы получаете? – dg99

ответ

2

У меня нет доступа к вашим данным, поэтому я создал образцы данных. Увидев ваш код, вы создали четыре полигона в четырех вызовах. Я думаю, вы хотите объединить все данные и нарисовать полигоны. Когда вы используете fortify(), вы видите столбец для id. Вы хотите убедиться, что каждый многоугольник имеет уникальный идентификатор, если вы объедините свои данные. Как только у вас есть данные, вы можете сделать свою работу просто, я думаю. Вы можете вручную изменить цвета полигонов с scale_fill_manual()

library(ggmap) 
CenterOfMap <- geocode("-1.4, 35.08") 

MasaiMara <- get_map(c(lon=CenterOfMap$lon, lat=CenterOfMap$lat), zoom = 10, 
        maptype = "roadmap", source = "google") 

ggmap(MasaiMara) + 
geom_polygon(data = mydf, aes(x = long, y = lat, group = id, fill = factor(id))) + 
scale_fill_manual(values = c("red", "red", "blue")) 

enter image description here

ДАННЫХ

mydf <-structure(list(id = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L), long = c(34.97, 34.95, 34.95, 34.97, 34.97, 
35, 34.82, 34.83, 35, 35, 35.2, 35.1, 35.1, 35.2, 35.2), lat = c(-1.38, 
-1.38, -1.4, -1.4, -1.38, -1.6, -1.6, -1.7, -1.7, -1.6, -1.43, 
-1.43, -1.5, -1.5, -1.43)), class = c("tbl_df", "tbl", "data.frame" 
), row.names = c(NA, -15L), .Names = c("id", "long", "lat"), spec = structure(list(
cols = structure(list(id = structure(list(), class = c("collector_integer", 
"collector")), long = structure(list(), class = c("collector_double", 
"collector")), lat = structure(list(), class = c("collector_double", 
"collector"))), .Names = c("id", "long", "lat")), default = structure(list(), class = c("collector_guess", 
"collector"))), .Names = c("cols", "default"), class = "col_spec")) 
+0

Я знаю, что я спросил это много лет назад, но я понимаю, что я никогда не говорил спасибо за ответы! Я закончил использовать ArcGIS, чтобы сделать карту, которую я ВЫСОКО рекомендую за R для создания карт. В десять миллионов раз легче манипулировать. Но спасибо большое! – user6776473