2012-02-16 4 views
31

Я использую ggplot2 в последнее время, чтобы создать кучу choropleths. Мне было интересно, если бы можно было использовать ggplot2, чтобы создать карту, подобную этой (от WorldMapper):Картограмма + карта choropleth в R

enter image description here

Это choropleth где шейп многоугольники искажены представления относительных численности популяции. Я считаю, что это называется картограммой. Они делают это с кучей других переменных. В духе Choropleth R Challenge, кто-нибудь знает, как это сделать, используя R?

+2

Вы можете попробовать [ScapeToad] (http://scapetoad.choros.ch/) для картограмм вне среды R. – radek

+1

Спасибо за это; ScapeToad отлично работает и удовлетворяет мои потребности. Тем не менее, я оставлю вопрос на случай, если есть решение в пределах R. –

+4

Я начал работу по интеграции d3-картограммы с rCharts. Какова структура ваших данных? – timelyportfolio

ответ

4

cartogrampackage, доступный на CRAN, имеет картограмму с искажающим резистором, которую вы хотите.

1

Это может работать:

Вам нужно будет предварительно установить FFTW. Rcartogram and getcartr you will need devtools.

Не знаете, как это сделать в ggplot2, но вот еще один вариант.

Здесь я использую шейп-файл от Thematic World Map, после того как вы загрузите и распакуете, вы получите папку под названием TM_WORLD_BORDERS-0.3.

Для choropleth/картограммы, вы бы изменить первую с размером, и тени с функцией:

library(rgdal)#needed for readOGR 
library(sp) #needed for spplot 
library(Rcartogram) 
library(getcartr) 
setwd("<your_directory_with_shapefile>") #to the file that has your shapefile and your information file (in this case, a csv named datR) 
#read shapefile 
#here i have a folder with a shapefile and a csv with columns as ISO (IS02 for convenience) country and value 
worldR <- readOGR(dsn = getwd(), layer= "TM_WORLD_BORDERS-0.3") # If reading a shapefile, the data source name (dsn= argument) is the folder (directory) where the shapefile is, and the layer is the name of the shapefile (without the .shp extension) 
#names(worldR) #note how here there are columns for ISO2 (which matches a column named 'iso' in datR and LAT\LON 
#[1] "FIPS"  "ISO2"  "ISO3"  "UN"  "NAME"  "AREA"  "POP2005" "REGION" "SUBREGION" "LON"  "LAT" 
proj4string(worldR) 
datR <- read.csv("datR.csv") #this is a file that has one column called 'score' and one column called size': 

    head(datR) 
    # iso size  score 
    #1 AE 323 0.9819077 
    #2 AR 262 0.9591067 
    #3 AT 7481 0.9987313 
    #4 AU 5425 0.9837414 
    #5 BA 31 0.9871938 
    #6 BB 99 0.9715991 

    ##Merge SpatialPolygonsDataFrame with other info 
    map_dat <- merge(worldR, datR, by.x="ISO2",by.y="iso") 
    #remove coordinate reference system arguments 
    proj4string(map_dat) <- CRS(as.character(NA)) # from here https://github.com/chrisbrunsdon/getcartr/issues/1 
    world.carto <- quick.carto(map_dat, map_dat$size, blur = 0) 
    #plot(world.carto) #cartogram without anything 
    #spplot size, color 
    my.palette = c("#ff0000", "#ff8000", "#ffff00", "#bfff00","#00ff00") #red, orange, yellow, light green, dark green 
    spplot(world.carto, 'score', col.regions = my.palette, cuts = length(my.palette)-1,main="Choropleth of score and cartogram of size") 

Это должно дать вам сюжет, похожий на этот:

enter image description here

Я сделал это в спешке, дайте мне знать, если это работает

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