2017-09-15 4 views
1

CARTO(別名cartodb)で等高線マップをエクスポートする必要があるので、このstat2densityチャートをshapefileやgeojsonのようなジオデータファイル形式で保存しようとしています。 ggsaveでSVGに保存できますが、spdfまたはsfオブジェクトで変換すると非常に便利です。シェイプファイルにggplot2 coord_map()グラフを保存する

library(ggplot2) 
library(ggmap) 
data("crime") 
crime<- head(crime,1000) 

gg <- ggplot(aes(x = lon, y = lat), data=crime) + 
stat_density2d(aes(alpha=..level.., color=..level.., fill=..level..),geom='polygon', bins = 10, size=0.5) + 
scale_color_gradient(low = "grey", high = "#444444", guide = F)+ 
scale_fill_gradient(low = "yellow", high = "red", guide = F)+ 
scale_alpha(guide = F)+ 
coord_map()+ 
ggthemes::theme_map() 

+3

'?ggplot_build' – hrbrmstr

+1

あなたは')( 'writeOGRを試してみましたか? –

答えて

1

は、ここで上記@hrbrmstr & @Rich Paulooによって提案されたアイデアだけでなく、the answer to this questionを組み込んだソリューションです:

ステップ1

library(dplyr) 

# return a list of data frames (each data frame contains coordinates for one contour); 
# note that there may be multiple contours at the same alpha/colour/fill, 
# hence the need to split by group rather than by these aesthetic mappings. 
dg <- layer_data(gg) %>% 
    select(group, x, y) %>% 
    split(.$group) %>% 
    lapply(function(d){d[,-1]}) 

ステップ2:ggplotオブジェクトから関連データを抽出します。 writeOGRに渡される、SpatialPolygonsDataFrameオブジェクトにデータ・フレームを変換:

library(sp) 

# convert each data frame to a Polygon class object 
polygons <- lapply(dg, Polygon) 

# convert each Polygon class object to Polygons class object 
polygons <- lapply(seq_along(polygons), 
        function(i){ 
        Polygons(list(polygons[[i]]), 
           ID = names(dg)[i]) 
        }) 

# convert list of Polygons class object to one SpatialPolygons object 
polygons <- SpatialPolygons(polygons) 

# convert SpatialPolygons object to SpatialPolygonsDataFrame object 
polygons <- SpatialPolygonsDataFrame(polygons, 
            data = layer_data(gg) %>% 
             select(group, alpha, colour, fill) %>% 
             unique(), 
            match.ID = "group") 

ステップ3

rgdal::writeOGR(obj = polygons, 
       dsn = getwd(),  # or wherever you wish to store it 
       layer = "filename", # or whatever you wish to name it 
       driver = "ESRI Shapefile") 

(私は別のGISプログラムでこれを確認することが好ましいだろうが、私はいずれかがこのコンピュータにインストールされていない)Rで結果を確認:

シェープファイルとしてSpatialPolygonsDataFrameオブジェクトを保存
# read the shapefile back into R 
sp <- rgdal::readOGR(dsn = getwd(), 
        layer = "filename") 

# fortify as a data frame 
spdf <- left_join(broom::tidy(sp, region = "group"), 
        [email protected], 
        by = c("id" = "group")) 

# plot 
ggplot(spdf, 
     aes(x = long, y = lat, group = group, alpha = alpha)) + 
    geom_polygon(color = "black") + 
    coord_map() 

shapefile turned ggplot

+0

素晴らしい!それは完全に動作します – andriatz

関連する問題