2014-12-06 1 views
2

Я пытаюсь создать красивый участок пузыря, наложенный поверх базовой карты США (я могу импортировать шейп-файл, если это предпочтительно, но я был с помощью базовых карт R.R Создайте пространственный участок пузырька, который накладывает базовую карту США и другие пространственные слои по мере необходимости

library(ggplot2,sp,raster,maps,mapdata,maptools,ggmap,rgeos) 
myData = data.frame(name=c("Florida","Colorado","california","Harvard","Yellowstone"), 
       lat=c(28.1,39,37,42,44.6), 
       long=c(-81.6,-105.5,-120,-71,-110), 
       pop=c(280,156,128,118,202)) 

используя этот код, приведенный ниже, что я адаптировано из другого переполнения стека пост (Create bubble plot in R using satellite map), я могу наложить пузырь участок на карте США. Однако это проявляется очень медленно, степень слишком тугая, она ограничена в ящике, я не могу добавить другие слои к сюжету из того, что я могу сказать, а базовая карта толстая и не визуально чистая.

xy <- myData[,c("long", "lat")] 
nl <- getData('GADM', country="USA", level=1) #raster data, format SpatialPolygonsDataFrame 
nl <- gSimplify(nl, tol=0.01, topologyPreserve=TRUE) 
# coercing the polygon outlines to a SpatialLines object 
spl <- list("sp.lines", as(nl, "SpatialLines")) 
SPDF <- SpatialPointsDataFrame(coords=xy, data=myData) 
coordinates(myData) <- c("lat", "long") 
projection(SPDF)<- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0" 
coordinates(SPDF)[1:5,] #retrieves spatial coordinates form the dataframe 
bubble(SPDF, "pop", sp.layout=spl, main="This is It!") 

Я могу нарисовать хорошую базовую карту, используя этот код. Я добавляю точки к карте, но они не сортируются по столбцу pop в моих данных. И я могу добавить дополнительные слои к этой карте. Но могу ли я контролировать размер точек и самого символа, как я могу использовать сюжет пузыря?

map(database= "world", ylim=c(45,90), 
    xlim=c(-160,-50), col="grey80", 
    fill=TRUE, projection="gilbert", 
    orientation= c(90,0,225)) 

coord <- mapproject(myData$lon, myData$lat, proj="gilbert",orientation=c(90, 0, 225)) 
points(coord, pch=20, cex=1.2, col="red") 

Может кто-нибудь, пожалуйста, руководство меня к наилучшим образом построить карту пузыря в R, где я могу настроить заливку и контур символов в карте пузыря, и я могу добавить чистую базовую карту, что я могу a) контролировать цвета (заливка и линии) и b) добавлять дополнительные слои (например, еще один слой в шейп-файл).

Заранее благодарю за любой совет.

ответ

3

Это может быть полезно. Я подошел к твоему вопросу, используя свой собственный путь. Это может быть более простая операция для достижения того, что вы, вероятно, пытаетесь сделать. Для карт GADM отлично. Но некоторые пакеты уже получили карты. Здесь вы можете легко получить карту Штатов следующим образом. Затем вы можете нарисовать карту, используя ggplot2. geom_path рисует США, а geom_point добавляет данные в myData. Если вы хотите контролировать размер пузырьков в ggplot2, вы можете использовать size в aes.

library(map) 
library(ggplot2) 

# Get US map 
usa <- map_data("state") 

# Draw the map and add the data points in myData 

ggplot() + 
geom_path(data = usa, aes(x = long, y = lat, group = group)) + 
geom_point(data = myData, aes(x = long, y = lat, size = pop), color = "red") 

enter image description here

3

Следующая принять аналогичный подход к @ jazzurro также для использования ggplot и вашего первоначального подхода, но

  • использует другую базовую карту
  • дополнительно снижает многоугольники (вас не нужны границы hi-res для участка пузырька)
  • использует geom_map vs geom_path или geom_polygon
  • использует проекцию Альберс в coord_map
  • избавляется карта диаграммы барахла

 

library(maptools) 
library(mapproj) 
library(rgeos) 
library(rgdal) 
library(ggplot2) 

# for theme_map 
devtools::source_gist("33baa3a79c5cfef0f6df") 

# nice US map GeoJSON 
us <- readOGR(dsn="http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_500k.json", layer="OGRGeoJSON") 

# even smaller polygons 
us <- SpatialPolygonsDataFrame(gSimplify(us, tol=0.1, topologyPreserve=TRUE), 
           [email protected]) 

# don't need these for the continental base map 
us <- us[!us$NAME %in% c("Alaska", "Hawaii", "Puerto Rico", "District of Columbia"),] 

# for ggplot 
map <- fortify(us, region="NAME") 

# your data 
myData <- data.frame(name=c("Florida", "Colorado", "California", "Harvard", "Yellowstone"), 
        lat=c(28.1, 39, 37, 42, 44.6), 
        long=c(-81.6, -105.5, -120, -71,-110), 
        pop=c(280, 156, 128, 118, 202)) 

# the map 

gg <- ggplot() 
# the base map 
gg <- gg + geom_map(data=map, map=map, 
        aes(x=long, y=lat, map_id=id, group=group), 
        fill="#ffffff", color="#0e0e0e", size=0.15) 
# your bubbles 
gg <- gg + geom_point(data=myData, 
         aes(x=long, y=lat, size=pop), color="#AD655F") 
gg <- gg + labs(title="Bubbles") 
# much better projection for US maps 
gg <- gg + coord_map(projection="albers", lat=39, lat1=45) 
gg <- gg + theme_map() 
gg <- gg + theme(legend.position="bottom") 
gg <- gg + theme(plot.title=element_text(size=16)) 
gg 

enter image description here

Это должно сделать это довольно просто, чтобы добавить другие слои, а также ,

+0

СПАСИБО! это прекрасно работает и позволяет мне гибко добавлять новые слои и управлять проекционной информацией.Первый ответ короткий и элегантный, но он начал разваливаться, когда я пытался добавить другие слои. я буду продвигать его, когда у меня хватит репутации, чтобы сделать это :) –

+0

Немного проблемы. Что я делаю не так? > us <- readOGR (dsn = "http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_500k.json", layer = "OGRGeoJSON") Ошибка в ogrInfo (dsn = dsn, layer = layer, encoding = encoding , use_iconv = use_iconv,: Невозможно открыть файл – lawyeR

+0

@lawyeR Интересно, если ';' сразу после '.json' вызывает сообщение об ошибке. – jazzurro

Смежные вопросы