Choropleth in R: phá vỡ tùy chỉnh và âm mưu


13

Tôi có một câu hỏi liên quan đến việc vẽ sơ đồ choropleth. Điều gì được khuyến nghị liên quan đến việc vẽ sơ đồ với các khoảng nghỉ tùy chỉnh? Và làm cho nó trông hấp dẫn một chút.

Trong kịch bản của tôi, tôi đã sử dụng lệnh cốt truyện và spplot để trực quan hóa một số dữ liệu nhưng tôi không hoàn toàn hài lòng với kết quả này. Nó rất dễ dàng để xem lý do tại sao. Sử dụng spplot tôi nhận được một đoạn màu lặp lại các màu cho các giá trị khác nhau, điều này hơi lạ. Sử dụng cốt truyện với các khoảng nghỉ tùy chỉnh Tôi không thể tạo ra các khoảng thời gian tốt hơn cho các giá trị, ví dụ như các giá trị 0 có màu trắng trên bản đồ. Tỷ lệ sai lệch giữa truyền thuyết và bản đồ là tôi nghĩ có lẽ là kết quả của Rstudio.

Vì vậy, tôi tự hỏi liệu ai đó có đề xuất tốt hơn cho việc vẽ sơ đồ choropleth trong R bằng cách sử dụng ngắt tùy chỉnh?

EDIT 20-02-2013

Theo đề xuất, tôi đã sử dụng ggplot2 để tạo bản đồ choropleth. Tôi đã sử dụng mã dưới đây. Tôi gặp hai vấn đề. Một là sau khi củng cố dữ liệu, không phải tất cả dữ liệu từ shapefile được chuyển vào khung dữ liệu. Vì vậy, tôi phải đổi tên biến "id" để có thể hợp nhất dữ liệu. Vấn đề nhỏ.

Một vấn đề lớn hơn là mặc dù thực tế là dữ liệu trong khung dữ liệu là chính xác, ggplot hiển thị bản đồ nơi dữ liệu không chính xác. Giá trị màu theo chú giải không tương ứng với giá trị của biến trong dữ liệu. Tôi đang nhìn gì đó ở đây?

# 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()

Liên kết với dữ liệu sao chép

Cập nhật 13-11-2015: Đã sửa lỗi liên kết đến hình dạng tệp . Xem câu trả lời dưới đây để biết giải pháp về cách vẽ biểu đồ hợp xướng.


5
Tôi cũng sẽ xem xét việc sử dụng ggplot2cho các bản đồ choropleth, mà tôi nghĩ rằng hóa ra đầu ra nhìn tốt hơn theo mặc định.
SlowLearner

Vâng, tôi không chắc chắn về việc sử dụng ggplot2 vì dữ liệu dài / lat trong shapefile của tôi chỉ xác định một điểm chứ không chỉ ra đường viền của biên giới quốc gia. Vì vậy, tôi đã sử dụng những mảnh đất này để tạo ra một bản đồ choropleth. Tôi không quen lắm với việc xử lý dữ liệu GIS trong R nên không chắc chắn liệu tôi có đang xem xét một số giải pháp thực sự đơn giản cho việc đó không.
Horseoftheyear

Vui lòng sửa liên kết đến shapefile.
cá nóc

Chắc chắn không có vấn đề.
Horseoftheyear

Câu trả lời:


6

Tôi không thấy vấn đề với đoạn mã trên ngoại trừ việc bạn có 6 cấp độ rõ ràng onset, vì vậy tôi sẽ coi chúng là các yếu tố chứ không phải là một biến liên tục. Lưu ý factorcuộc gọi trong mã dưới đây.

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

Mã đó cho kết quả như sau:

nguyên

Nếu bạn muốn màu tùy chỉnh, bạn có thể thử điều này:

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()

Cái nào tạo ra cái này:

màu sắc tùy chỉnh


Nó vẫn âm mưu các giá trị sai mặc dù. Rất kỳ dị.
Horseoftheyear

OK, bạn có thể chỉ định chính xác vấn đề là gì, với các ví dụ? Ăng-gô được chỉ định một 3cho onsetcột và vẽ đồ thị 3trong biểu đồ. Điều đó dường như làm việc. Có lẽ tôi đang thiếu một cái gì đó?
SlowLearner

Có, xin lỗi. Angola là một trong số ít đó là chính xác. Ví dụ, nếu bạn nhìn vào Nam Phi, Namibia hoặc Sénégal, bạn sẽ thấy rằng giá trị như được chỉ ra bởi màu sắc không tương ứng với giá trị trong dữ liệu. Vì vậy, Senegal nên là 6 (bây giờ là 2), Nam Phi 0 (4) và Namibia cũng là 0 (1). Burundi và Rwanda cũng được đặt tên cho một số khác. Trong liên kết, một âm mưu tôi đã thực hiện với spplot hiển thị bản đồ với các giá trị chính xác. Âm mưu này được thực hiện trực tiếp từ shapefile. Vì vậy, tôi đoán có gì đó không ổn với việc tạo dataframe.
Horseoftheyear

5

Gói classInt có một số hàm để tính toán các khoảng thời gian cho dữ liệu số - cài đặt nó và đọc các tài liệu.


Có, tôi đã sử dụng gói classInt với các dấu ngắt cố định (không được hiển thị trong tập lệnh) nhưng vấn đề với nó là nó tính các khoảng cho dữ liệu số liên tục. Trong khi các khoảng của tôi là rời rạc, chúng đại diện cho một tần số của các sự kiện. Chưa tìm ra cách cải thiện điều đó.
Horseoftheyear

1

Đối với tài liệu lưu trữ, giải pháp tôi đã sử dụng:

#### 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)))

nhập mô tả hình ảnh ở đây


Có một gói cho R cung cấp chức năng ánh xạ hữu ích. Nó được gọi là bản đồ học (và đáng chú ý là cho phép bản đồ choropleth theo tài liệu). Xin lỗi nếu nó lạc đề (như bạn đã tìm thấy câu trả lời của mình) nhưng hãy nói rằng nó để tham khảo trong tương lai ..!
mgc

Trông khá đẹp. Tôi chắc chắn sẽ thử nó cho công việc khác, vì vậy cảm ơn bạn đã tham khảo.
Horseoftheyear
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.