Хороплет в 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: исправлена ​​ссылка на файл формы . См. Ответ ниже для решения о том, как построить сюжетную линию.

horseoftheyear
источник
5
Я также хотел бы взглянуть на использование ggplot2для картограмм, которые, по-моему, лучше выглядят по умолчанию.
SlowLearner
Да, я не был уверен в использовании ggplot2, поскольку данные long / lat в моем шейп-файле указывают только точку, а не контур национальных границ. Поэтому я использовал эти графики для создания картограммы. Я не очень хорошо знаком с обработкой ГИС-данных в R, поэтому не уверен, что пропускаю какое-то действительно простое решение для этого.
год
Пожалуйста, исправьте ссылку на шейп-файл.
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()

Который производит это:

пользовательские цвета

SlowLearner
источник
Это все еще наносит на карту неправильные значения все же. Очень своеобразно.
2013 года
Хорошо, вы можете точно указать, в чем проблема, с примерами? Ангола присваивается 3для onsetстолбца и участков через 3на графике. Это похоже на работу. Предположительно я что-то упустил?
SlowLearner
Ой, да извините. Ангола является одной из немногих, что правильно. Например, если вы посмотрите на Южную Африку, Намибию или Сенегал, вы увидите, что значение, обозначенное цветом, не соответствует значению в данных. Таким образом, Сенегал должен быть 6 (теперь 2), Южная Африка 0 (4) и Намибия также 0 (1). Бурунди и Руанда также собираются назвать несколько других. В ссылке я сделал график с помощью spplot, который показывает карту с правильными значениями. Этот сюжет сделан прямо из шейп файла. Так что я думаю, что что-то не так с созданием кадра данных.
2013 года
5

В пакете classInt имеется ряд функций для вычисления интервалов для числовых данных - установите его и прочитайте документы.

Spacedman
источник
Да, я использовал пакет classInt с фиксированными разрывами (не показан в скрипте), но проблема в том, что он вычисляет интервалы для непрерывных числовых данных. В то время как мои интервалы дискретны, они представляют частоту событий. Пока не выяснили, как это исправить.
Horseoftheyear
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)))

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

horseoftheyear
источник
Существует пакет для R, который предлагает полезные функции отображения. Это называется картографией (и, в частности, позволяет картографировать карты в соответствии с документацией). Извините, если это не по теме (как вы уже нашли свой ответ), но, скажем, для дальнейшего использования ..!
MGC
Это выглядит довольно мило. Я непременно попробую для другой работы, так что спасибо за ссылку.
Конец