Choropleth ใน R: ตัวแบ่งที่กำหนดเองและการวางแผน


13

ฉันมีคำถามเกี่ยวกับการพล็อตแผนที่เป็นนักร้อง สิ่งที่แนะนำเกี่ยวกับการพล็อตแผนที่ด้วยตัวแบ่งที่กำหนดเอง? และทำให้ดูน่าสนใจขึ้นมาหน่อย

ในสคริปต์ของฉันฉันใช้คำสั่ง plot และ spplot เพื่อแสดงข้อมูลบางอย่าง แต่ฉันไม่พอใจกับผลลัพธ์ทั้งหมด มันง่ายที่จะดูว่าทำไม ใช้spplotฉันได้รับทางลาดสีที่ทำซ้ำสีสำหรับค่าที่แตกต่างซึ่งเป็นบิตแปลก การใช้พล็อตที่มีตัวแบ่งที่กำหนดเองฉันไม่สามารถทำให้ช่วงเวลาที่ดีขึ้นสำหรับค่าเช่นว่าค่าศูนย์เป็นสีขาวบนแผนที่ ฉันคิดว่าสัดส่วนที่เบ้ระหว่างคำอธิบายแผนภูมิและแผนที่อาจเป็นผลมาจาก Rstudio

ดังนั้นฉันสงสัยว่ามีใครบางคนมีคำแนะนำที่ดีกว่าสำหรับการวางแผนแผนที่ choropleth ใน R โดยใช้ตัวแบ่งที่กำหนดเองหรือไม่?

แก้ไข 20-02-2013

ตามที่แนะนำฉันได้ใช้ ggplot2 เพื่อสร้างแผนที่ choropleth ฉันใช้รหัสด้านล่าง ฉันพบปัญหาสองข้อ หนึ่งคือหลังจากเสริมข้อมูลไม่ได้ข้อมูลทั้งหมดจาก shapefile จะถูกโอนไปยังกรอบข้อมูล ดังนั้นฉันต้องเปลี่ยนชื่อตัวแปร "id" เพื่อที่ฉันจะได้รวมข้อมูล ปัญหาเล็กน้อย

ปัญหาที่ใหญ่กว่าคือแม้ว่าข้อเท็จจริงที่ว่าข้อมูลใน dataframe นั้นถูกต้อง 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: การเชื่อมโยงถาวรเพื่อไฟล์รูป ดูคำตอบด้านล่างสำหรับวิธีแก้ปัญหาเกี่ยวกับวิธีการเขียน choropleth


5
ฉันจะดูที่การใช้ggplot2แผนที่ choropleth ด้วยซึ่งฉันคิดว่าผลลัพธ์ที่ออกมาดูดีกว่าโดยปริยาย
SlowLearner

ใช่ฉันไม่แน่ใจเกี่ยวกับการใช้ ggplot2 เนื่องจากข้อมูล long / lat ใน shapefile ของฉันระบุเพียงจุดเท่านั้นและไม่ใช่โครงร่างของเส้นขอบแห่งชาติ ดังนั้นฉันจึงใช้พล็อตเหล่านี้เพื่อสร้างแผนที่ของนักร้อง ฉันไม่คุ้นเคยกับการจัดการข้อมูล GIS ใน R มากนักดังนั้นไม่แน่ใจว่าฉันมองข้ามโซลูชันที่ตรงไปตรงมาจริงๆ
horseoftheyear

โปรดแก้ไขลิงก์ไปยัง shapefile
ปลาปักเป้า

แน่นอนไม่มีปัญหา.
horseoftheyear

คำตอบ:


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

ซึ่งผลิตสิ่งนี้:

สีที่กำหนดเอง


มันยังคงวางแผนค่าที่ผิดแม้ว่า แปลกมาก
horseoftheyear

ตกลงคุณสามารถระบุสิ่งที่เป็นปัญหาด้วยตัวอย่างได้หรือไม่? แองโกลาได้รับมอบหมายให้3สำหรับonsetคอลัมน์และแปลง a 3ในแผนภูมิ ดูเหมือนว่าจะทำงาน สมมุติว่าฉันขาดอะไรไป?
SlowLearner

โอ้วขอโทษด้วย แองโกลาเป็นหนึ่งในไม่กี่คนที่ถูกต้อง หากคุณดูที่แอฟริกาใต้นามิเบียหรือเซเนกัลคุณจะเห็นว่าค่าที่ระบุโดยสีไม่ตรงกับค่าในข้อมูล ดังนั้นเซเนกัลควรเป็น 6 (ตอนนี้ 2), แอฟริกาใต้ 0 (4) และนามิเบียด้วย 0 (1) บุรุนดีและรวันดาก็เป็นอีกชื่อหนึ่ง ในลิงค์พล็อตที่ฉันทำกับ spplot ซึ่งแสดงแผนที่ที่มีค่าที่ถูกต้อง พล็อตนี้ทำได้โดยตรงจากรูปร่างไฟล์ ดังนั้นฉันเดาว่ามีบางอย่างผิดปกติในการสร้างดาต้าเฟรม
horseoftheyear

5

แพ็คเกจ classInt มีฟังก์ชันมากมายสำหรับการคำนวณช่วงเวลาสำหรับข้อมูลตัวเลข - ติดตั้งและอ่านเอกสาร


ใช่ฉันใช้แพ็คเกจ 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)))

ป้อนคำอธิบายรูปภาพที่นี่


มีแพ็คเกจสำหรับ R ซึ่งมีฟังก์ชั่นการทำแผนที่ที่มีประโยชน์ มันถูกเรียกว่าการทำแผนที่ (และช่วยให้สามารถทำแผนที่ตามเอกสารอ้างอิง) ขออภัยถ้าไม่อยู่ในหัวข้อ (ตามที่คุณได้พบคำตอบแล้ว) แต่สมมุติว่ามันใช้สำหรับการอ้างอิงในอนาคต .. !
mgc

ดูดีทีเดียว ฉันจะลองใช้กับงานอื่นอย่างแน่นอนดังนั้นขอขอบคุณสำหรับการอ้างอิง
horseoftheyear
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.