首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R ggplot2映射问题,自动丢失状态信息。

R ggplot2映射问题,自动丢失状态信息。
EN

Stack Overflow用户
提问于 2014-03-28 16:09:52
回答 2查看 1.7K关注 0票数 1

在ggplot2中,我遇到了一些问题,想出解决这个地理映射问题的方法。问题是ggplot没有填充某些州的数据,并将其保留为空白。这是有道理的,因为这些州没有任何价值的基础上,我的填补。

我知道我可能会为这些州添加行,然后用0填充它们,但是那些没有值的状态应该会随着时间的推移而改变。我试图构建这是自动化的,因为在谁做这个月到一个月的字面上必须保存文件和点击运行,所以我希望这是自己更新。

在一个完美的世界里,没有价值的国家在轴心上会被不同的标记为“不渗透”。

GGplot代码:

代码语言:javascript
复制
 map<- ggplot(penetration_levels,aes(long,lat,group=region,fill=Penetration),)+geom_polygon()+coord _equal()+scale_fill_gradient2(low="red",mid="white",high="green",midpoint=.25)
map
map<-map+geom_point(
data=mydata, aes(x=long, y=lat,group=1,fill=0, size=Annualized.Opportunity),
color="gray6") + 
scale_size(name="Total Annual Opportunity-Millions",range=c(2,4))  
map<-map+theme(plot.title = element_text(size = 12,face="bold"))
map

我的数据和渗透的头

代码语言:javascript
复制
head(mydata)
Sold.To.Customer            City State Annualized.Opportunity           location          lat      long
21          10000110        NEW YORK    NY              12.142579        NEW YORK,NY     40.71435 -74.00597
262         10016487 FORT LAUDERDALE    FL              12.087310 FORT LAUDERDALE,FL 26.12244 -80.13732
349         11001422      ALLEN PARK    MI              10.910575      ALLEN PARK,MI 42.25754 -83.21104
19          10000096           ALTON    IL              10.040067           ALTON,IL 38.89060 -90.18428
477         11067228        BAY CITY    TX              10.030829        BAY CITY,TX 28.98276 -95.96940
230         10014909        BETHPAGE    NY               9.320271        BETHPAGE,NY 40.74427 -73.48207
代码语言:javascript
复制
head(penetration_levels)
State  region      long      lat group order subregion state       To     From    Total    Penetration
17    AL alabama -87.46201 30.38968     1     1      <NA>    AL 10794947 12537359 23332307    0.462661
18    AL alabama -87.48493 30.37249     1     2      <NA>    AL 10794947 12537359 23332307    0.462661
22    AL alabama -87.52503 30.37249     1     3      <NA>    AL 10794947 12537359 23332307    0.462661
36    AL alabama -87.53076 30.33239     1     4      <NA>    AL 10794947 12537359 23332307    0.462661
37    AL alabama -87.57087 30.32665     1     5      <NA>    AL 10794947 12537359 23332307    0.462661
65    AL alabama -87.58806 30.32665     1     6      <NA>    AL 10794947 12537359 23332307    0.462661

合并:

代码语言:javascript
复制
#geocode
geocode<-geocode(mydata$location)
mydata$lat<-geocode$lat
mydata$long<-geocode$lon
#create us map and graph
states<-map_data("state")
#merge states
states<-merge(states,statelookup,by="region")
penetration_levels<-merge(states,penetration_levels,by="State")
penetration_levels<- penetration_levels[order(penetration_levels$order), ]

然后直接进入地图绘制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-28 23:35:36

所以这是一个常见的问题。通常,choropleth地图需要将地图数据与包含用于设置多边形填充颜色的信息的数据集进行某种形式的合并。在OP的情况下,这样做如下:

代码语言:javascript
复制
states <- map_data("state")
states <- merge(states,statelookup,by="region")
penetration_levels <- merge(states,penetration_levels,by="State")

问题是,如果penetration_levels有任何缺失的States,这些行将被排除在合并之外(在数据库术语中,这是一个内部连接)。所以在绘制地图的过程中,这些多边形将会丢失。解决办法是使用:

代码语言:javascript
复制
penetration_levels <- merge(states,penetration_levels,by="State",all.x=T)

这将返回第一个参数( "x“参数)的所有行,并与第二个参数(左联接)中的匹配状态中的任何数据合并。缺失值设置为NA

NA值的多边形(状态)的填充颜色默认设置为grey50,但可以通过向绘图定义添加以下调用来更改:

代码语言:javascript
复制
scale_fill_gradient(na.value="red")
票数 2
EN

Stack Overflow用户

发布于 2014-03-28 17:16:12

您不能为缺少的状态添加一个检查,并为它们添加行(插入值为零)到数据帧中吗?一个简单的例子:

代码语言:javascript
复制
# Create a generic data frame with zeros for penetration
zeros.data = data.frame(State=as.character(state.abb), penetration=0)

# Create a simplified analogue of your data
penetration_levels = data.frame(State=as.character(state.abb[1:30]), 
                                penetration=runif(30,0.1,1))

# Get values for missing states
missing.states = setdiff(state.abb, unique(penetration_levels$State))

# Get required data for missing states.
penetration_levels = rbind(penetration_levels,
                           zeros.data[zeros.data$State %in% missing.states,])

您可以在运行绘图代码之前执行这样的检查,以自动填充所有缺失状态的零穿透数据帧(当然,您的"zeros.data“数据框架必须包括原始数据框架中的其他列,其中填充了NAs或绘图所需的任何数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22717892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档