我正在比较弗吉尼亚州2010年和2014年中期选举的结果。我这样做是通过在弗吉尼亚州的地图上使用弗吉尼亚国会区的文件。我想为那些选出共和党候选人的地区上色,并选出民主党选中蓝色的地区。 项目还有更多内容,但一旦我弄清楚如何做到这一点,我将能够弄清楚如何进行项目的其余部分。
我正在使用此处找到的文件:
http://www.arcgis.com/home/item.html?id=dc20260d27654c64bfa0c2979a317597
这是我用来绘制shapefile的代码:
library(maptools)
library(shapefiles)
CCBound <- readShapePoly("tl_rd13_51_cd113")
CCBound2 <- CCBound
system.time(plot(CCBound2))
这给了我一张很好的弗吉尼亚州地图,其中列出了十个国会选区。
如上所述,我应该如何在各区进行着色?
答案 0 :(得分:1)
CCBound
对象是SpatialPolygonsDataFrame
。基本上,它是一个多边形列表加上data.frame
,其行数与多边形数一样多,它给出了每个多边形的一些信息。您可以查看data.frame
至:
CCBound@data
从中我们了解到有11个地区。从那里,你可以建立一个颜色矢量,其中red
或blue
值取决于谁赢得了区。向量中的值必须与CCbound@data
中的区域的顺序相同。构建此向量后,可以使用plot
参数调用col
函数。如果cols
是颜色矢量,您可以尝试:
plot(CCBound,col=cols)
答案 1 :(得分:1)
这是一个ggplot
解决方案。你似乎要求一个基本的R方法,但IMO值得学习ggplot以增加灵活性。这应该可以帮到你。
我必须对您的数据格式做出一些假设,因为您没有提供它。下面的代码仅显示了此示例中数据的组织方式
# 2010 and 2014 Congressional Election results in Virginia.
data.2010 <- data.frame(district=sprintf("%02i",1:11),
R=c(63.9,53.1,27.2,62.3,50.8,76.3,59.2,37.3,51.2,62.9,48.8),
D=c(34.8,42.4,70.0,37.5,47.0,00.0,34.1,61.0,46.4,34.8,49.2))
data.2014 <- data.frame(district=sprintf("%02i",1:11),
R=c(63.0,57.9,000.0,60.3,61.0,75.5,60.9,31.7,74.9,56.6,40.4),
D=c(34.5,42.1,100.0,37.5,35.8,00.0,36.9,63.0,00.0,40.4,56.9))
data <- cbind(year=rep(c(2010,2014),each=11),rbind(data.2010,data.2014))
data$delta <- with(data,D-R)
head(data)
# year district R D delta
# 1 2010 01 63.9 34.8 -29.1
# 2 2010 02 53.1 42.4 -10.7
# 3 2010 03 27.2 70.0 42.8
# 4 2010 04 62.3 37.5 -24.8
# 5 2010 05 50.8 47.0 -3.8
# 6 2010 06 76.3 0.0 -76.3
绘制地图。
library(ggplot2)
library(rgdal)
setwd("c:/users/jlh/desktop/map/virginia.congressional.districts")
map <- readOGR(dsn=".",layer="tl_rd13_51_cd113")
map.data <- data.frame(id=rownames(map@data),district=map@data$CD113FP)
map.data <- merge(map.data,data)
map.df <- fortify(map)
map.df <- merge(map.df,map.data)
ggplot(map.df,aes(x=long,y=lat,group=group))+
geom_polygon(aes(fill=delta),color="grey20")+
facet_wrap(~year,nr=2)+
scale_fill_gradient2(low="red",high="blue",mid="white",limits=c(-100,100))+
coord_map()+labs(x="",y="")+
theme_bw()+
theme(panel.grid=element_blank(),
panel.border=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank())
请注意,在2014年的第三区,民主党人无人反对,而第六和第九区则受到质疑,但没有民主党人参选。