我正试图在弗吉尼亚州的一部分创建一个邮政编码的等值线,以显示一些公司数据。除了最后一行aes(fill = growth)
之外,我可以正确运行所有内容。在那里,我收到一个错误:
错误:美学必须是长度为1或与dataProblems相同的长度:增长
这是我的数据:
我的代码:
library(ggplot2)
library(maptools)
library(rgdal)
library(plyr)
#set working directory
setwd("F:/Dropbox/Zip Codes")
#load Shapefile NOVA
Zips <- readOGR(dsn="F:/Dropbox/Zip Codes", layer="NOVA")
#load Company Data of Zip Codes
Company <- read.csv("Data.csv")
#set to data.frame
Company_df <- data.frame(Company)
#create growth vector
growth = Company_df[,'Growth']
#merge growth vector into Zips
Zips$growth = growth
#ggplot
Nmap = ggplot(Zips) +
aes(x = long, y = lat, group=group) +
geom_polygon() +
aes(fill = growth)
Nmap
答案 0 :(得分:4)
我的目录结构有点不同。尽管互联网上有较旧的代码段,但您无需将数据绑定到数据帧。但是,你做需要fortify
多边形与ggplot一起使用。此外,read.csv
会生成一个data.frame,因此您无需从该调用中重新创建一个。
library(ggplot2)
library(maptools)
library(rgdal)
library(ggthemes)
setwd("~/Development/nova_choro")
zips <- readOGR(dsn="zip_codes/NOVA.shp", layer="NOVA")
company <- read.csv("data.csv")
# this makes the polygons usable to ggplot2
# and by using ZCTA5CE10 as the region id,
# you can then use that equivalent id field
# from the actual company data frame for the
# choropleth colors
zips_map <- fortify(zips, region="ZCTA5CE10")
gg <- ggplot()
# draw the base map polygons
gg <- gg + geom_map(data=zips_map, map=zips_map,
aes(x=long, y=lat, map_id=id),
color="#7f7f7f", fill="white", size=0.25)
# fill in the polygons
gg <- gg + geom_map(data=company, map=zips_map,
aes(fill=Growth, map_id=zip_code_area),
color="#7f7f7f", size=0.25)
# better color scheme
gg <- gg + scale_fill_distiller(palette="Greens")
# no "slashes" in the legend boxes
gg <- gg + guides(fill=guide_legend(override.aes=list(colour=NA)))
# use an actual projection (there may be a better one for NOVA
gg <- gg + coord_map()
# get rid of map chart junk
gg <- gg + theme_map()
gg
我做了一些检查,VA使用了修改后的Lambert Conic Conformal投影,因此如果您愿意,可以用默认的Mercator coord_map
替换gg <- gg + coord_map("lambert", lat0=38.34427, lat1=39.14084)
,这应该与官方机构使用的内容足够接近