Хороплет в R: користувацькі перерви та побудови графіків


13

У мене є питання щодо побудови карти хороплету. Що рекомендується щодо побудови карти із спеціальними перервами? І зробити це виглядати трохи привабливо.

У своєму сценарії я використав команду plot та spplot для візуалізації деяких даних, але я не зовсім задоволений результатом. Неважко зрозуміти, чому. Використовуючи spplot, я отримую кольорову рампу, яка повторює кольори для різних значень, що трохи дивно. Використовуючи сюжет із користувацькими перервами, я не зміг зробити кращі інтервали для значень, такі, наприклад, що на нульовому значенні на карті є білі значення. Перекошені пропорції між легендою та картою - я думаю, ймовірно, результат Rstudio.

Тож я поцікавився, чи є хтось кращі пропозиції щодо побудови карт хороплета в R за допомогою спеціальних перерв?

РЕДАКЦІЯ 20-02-2013

Як було запропоновано, я використовував ggplot2 для створення карти хороплета. Я використав код нижче. У мене виникли дві проблеми. Одне полягає в тому, що після фортифікації даних не всі дані з файлу форми переносяться в кадр даних. Тому я повинен перейменувати змінну "id" таким чином, щоб я міг об'єднати дані. Незначне питання.

Більш важливим питанням є те, що незважаючи на те, що дані в рамці даних є правильними, ggplot показує карту, де дані невірні. Значення кольору згідно легенди не відповідає значенню змінної в даних. Я щось тут не помічаю?

# Plotting polygon shapefiles (try-out)
# Load the packages
require(rgdal)
require(maptools)
require(ggplot2)
gpclibPermit() # required for the fortify method
# Load the shapefile
africa=readOGR("/home/GIS",layer="africaII")
names(africa) 
# Load the data on conflict
conflict<-read.csv("africa_conflict.csv", header=TRUE)
names(conflict)
# Merge the data together
africadat<-merge(africa, conflict, by="ISO3")
# Changing the data in the shapefile
africa@data <- africadat
# Fortify so that ggplot can plot
africa.points = fortify(africa,region="ISO3")
# Change "id" to "ISO3"such that the datasets can be merged again
names(africa.points)[names(africa.points)=="id"]<-"ISO3"
africa.df=merge(africa.points,africadat,by="ISO3")
# Plot the data
ggplot(africa.df) + 
aes(long,lat,group=group) + 
geom_polygon(aes(fill =onset))+
geom_path(color="white") +
coord_equal()

Посилання на дані реплікації

Оновлення 13-11-2015: Виправлена ​​посилання на файл форми . Дивіться відповідь нижче, щоб вирішити, як побудувати хороплет.


5
Я також хотів би розглянути використання ggplot2карт хороплета, які, на мою думку, виглядають вигіднішими за замовчуванням.
SlowLearner

Так, я не був впевнений у використанні ggplot2, оскільки дані long / lat у моєму файлі форм лише вказують на точку, а не контур національних кордонів. Тому я використав ці сюжети, щоб створити карту хороплетів. Я не дуже знайомий з обробкою даних ГІС в R, тому не впевнений, чи я пропускаю якесь дійсно просте рішення для цього.
horseoftheyear

Виправте посилання на файл форми.
pufferfish

А як же, немає проблем.
кінний рік

Відповіді:


6

Я не бачу проблем з наведеним вище кодом, за винятком того, що у вас є 6 чітких рівнів onset, тому я ставлюся до них як до факторів, а не до суцільної змінної. Зверніть увагу на factorвиклик у наведеному нижче коді.

ggplot(africa.df) +
  aes(long,lat,group=group) +
  geom_polygon(aes(fill = factor(onset)))+
  geom_path(color="white") +
  coord_equal()

Цей код дає такий результат:

оригінальний

Якщо ви хочете користувальницькі кольори, ви можете спробувати це:

library(RColorBrewer)
my.cols <- brewer.pal(6, "Blues")

ggplot(africa.df) +
  aes(long,lat,group=group) +
  geom_polygon(aes(fill = factor(onset)))+
  scale_fill_manual("Onset\n", values = my.cols, guide = "legend") +
  geom_path(color="white") +
  coord_equal()

Що виробляє це:

спеціальні кольори


Але він все ще накреслює неправильні значення. Дуже своєрідний.
кінські роки

Гаразд, чи можете ви точно вказати, у чому проблема, із прикладами? Ангола присвоюється 3для onsetстовпця і ділянок через 3на графіку. Це, здається, працює. Імовірно, мені щось не вистачає?
SlowLearner

Ой так вибачте. Ангола - одна з небагатьох, яка є правильною. Якщо ви, наприклад, подивитесь на Південну Африку, Намібію чи Сенегал, то побачите, що значення, вказане кольором, не відповідає значенню в даних. Тож Сенегал повинен бути 6 (зараз 2), Південна Африка 0 (4), а Намібія також 0 (1). Бурунді та Руанда також не можуть назвати декілька інших. У посиланні я зробив сюжет із spplot, який показує карту з правильними значеннями. Цей сюжет робиться безпосередньо з файлу форми. Тож я здогадуюсь, що щось створюється не так у створенні фрейму даних.
кінний рік

5

Пакет classInt має ряд функцій для обчислення інтервалів для числових даних - встановіть його та прочитайте документи.


Так, я використав пакет classInt з фіксованими перервами (не показано в сценарії), але проблема в тому, що він обчислює інтервали для постійних числових даних. Тоді як мої інтервали дискретні, вони представляють частоту подій. Ще не дізнався, як покращити це.
кінські роки

1

Для архівів я використовував рішення:

#### Choropleth in R example ####

## Libraries
library(classInt)    
library(lattice)
library(RColorBrewer)    
library(sp)

## Shapefile for Sub-Sahara Africa (see link in Q)
africa<-readShapeSpatial("shp/africa.shp") 

## Add data to shapefile
# In this case the number of conflict onsets between 1981-2010
africa$onset<-c(3,0,3,1,3,1,4,2,3,0,
                2,0,3,1,1,0,2,1,1,1,
                2,0,3,0,1,0,0,4,2,1,
                3,0,1,0,6,1,3,1,1,0,
                0,1,1,0,0,0,0)

## Plot 
par(mar=c(1,4,1,1),family="serif")
trellis.par.set(axis.line=list(col=NA)) # Remove borders
spplot(africa,zcol="onset",col.regions=colorRampPalette(c("white","grey10"))(20),
main=list(label="Number of civil conflict onsets 1981-2010",cex=3),
pretty=T,par.settings=list(axis.text=list(cex=3)))

введіть тут опис зображення


Є пакет для R, який пропонує корисну функцію картографування. Вона називається картографією (і, зокрема, дозволяє хороплети карти відповідно до документації). Вибачте, якщо це поза темою (як ви вже знайшли свою відповідь), але скажімо, це для подальшого ознайомлення ..!
mgc

Це виглядає досить приємно. Я, безумовно, спробую іншу роботу, тому дякую за довідку.
кінний рік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.