我使用ggplot2在R中创建地图相对较新,但是我已经在这个问题上苦苦挣扎了几天。我创建了我的情节,但似乎无法增加用于将颜色映射到我的值的容器数量。
这是一个问题,因为地图无法很好地显示数据的变化。我不确定我是否正确接近这个问题。
这是我的代码:
region=c('alaska','alabama','arkansas','arizona','california','colorado','connecticut','florida','georgia','hawaii','iowa','idaho','illinois','indiana','kansas','kentucky','louisiana','massachusetts','maryland','maine','michigan','minnesota','missouri','mississippi','montana','north carolina','north dakota','nebraska','new hampshire','new jersey','new mexico','nevada','new york','ohio','oregon','pennsylvania','south carolina','south dakota','tennessee','texas','utah','virginia','vermont','washington','wisconsin','west virginia','oklahoma','wyoming')
sales=c(46,1240,471,2292,13427,1574,261,10036,826,1508,184,939,2356,1329,434,271,714,208,2027,21,950,500,1871,147,249,1204,69,175,369,1968,606,656,2369,2422,525,2902,1709,126,1563,12046,931,2271,46,2260,250,122,0,0)
state_data = as.data.frame(cbind(region,sales))
library(ggplot2)
library(maps)
all_states <- map_data("state")
D = merge(all_states, state_data, by = "region")
D = D[with(D,order(D$group,D$order)),]
p = ggplot()
p = p + geom_polygon( data=D, aes(x=long, y=lat, group = group, fill=D$sales),colour="white" )
p = p + xlab("")
p = p + ylab("")
p = p + labs(title = "sales")
p = p + guides(color=FALSE)
p = p + guides(size=FALSE)
p = p + guides(fill=guide_legend() )
p = p + guides(fill= guide_colorbar(title="sales",barheight = 1,barwidth=15,direction="horizontal",nbin=8) )
p = p + theme(legend.position="bottom")
p
理想情况下,我想将图例上的垃圾箱数量增加到大约8-10,并可能为渐变添加另一种颜色以显示其他细节。我已经尝试过ggplot2函数,但运气不好。
答案 0 :(得分:5)
您遇到的问题与sales
列是一个因素而非数字有关。以下将解决这个问题:
D = merge(all_states, state_data, by = "region")
D = D[with(D,order(D$group,D$order)),]
D$sales= as.numeric(D$sales) # this is the important bit...
p = ggplot(data=D) +
geom_polygon(aes(x=long, y=lat,
group = group, fill=sales),
colour = "white" ) + # Do not use D$, by use the column name
xlab("") + ylab("") + labs(title = "sales") + theme(legend.position="bottom")
p
......或者使用双色刻度:
p + scale_fill_gradient2(midpoint = 20)
一些风格笔记:
D$sales
)作为美学,只使用列名称(sales
)。p = p + ...
样式,只需在行尾使用+
并转到下一行。