首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SpatialLinesDataFrame中用ggplot/ggmap绘制和着色街道?

如何在SpatialLinesDataFrame中用ggplot/ggmap绘制和着色街道?
EN

Stack Overflow用户
提问于 2014-07-15 14:35:04
回答 1查看 3.8K关注 0票数 6

我有一个shapefile (SpatialLinesDataFrame),包含古龙水的所有街道,可以从这里下载。我将这个@数据与来自外部源的数据合并。我如何绘制这些街道(如果可能的话,在谷歌地图上使用ggmaps),使每条街道都有不同的颜色(或厚度),取决于其各自的价值?

到目前为止,我已经这样做了:

代码语言:javascript
复制
shapefile <- readOGR(shapfile, "Strasse", stringsAsFactors=FALSE, 
encoding="latin-9")
shp <- spTransform(shapefile, CRS("+proj=longlat +datum=WGS84"))

此时,我向shp@data数据框架添加了另一列,该列包含每个街道的某个值。然后,我加强了shapefile,这样它就可以使用ggplot绘制:

代码语言:javascript
复制
shp$id <- rownames(shp@data)
shp.df <- as.data.frame(shp)
data_fort <- fortify(shp, region = "id")
data_merged <- join(data_fort, shp.df, by="id")

当我使用geom_lines时,这些行看起来不太好,很难识别:

代码语言:javascript
复制
ggplot(data_merged, aes(x=long, y=lat,
                      group=group,
                      colour=values)) +
 geom_line()

这里 --我看到可以转换shapefile,以便可以使用geom_segement (或者在本例中使用修改后的函数"geom_segment2"),但随后会释放特定于街道的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 19:26:37

因此,这段代码从你的shapefile中抓取了100条最长的道路,在(1,10)上随机分配“值”,并在google的科隆光栅图像上绘制基于值的颜色图。

代码语言:javascript
复制
library(ggplot2)   
library(ggmap)          # for ggmap(...) and get_map(...)
library(rgdal)          # for readOGR(...)
library(plyr)           # for join(...)
set.seed(1)             # for reproducible example
setwd(" <directory with your shapefiles> ")
spl <- readOGR(dsn=".", "Strasse", encoding="latin-9")
spl <- spl[spl$SHAPE_LEN %in% tail(sort(spl$SHAPE_LEN),100),]
shp       <- spTransform(spl, CRS("+proj=longlat +datum=WGS84"))
shp.df    <- data.frame(id=rownames(shp@data),
                        values=sample(1:10,length(shp),replace=T),
                        shp@data, stringsAsFactors=F)

data_fort   <- fortify(shp)
data_merged <- join(data_fort, shp.df, by="id")

ggmap(get_map(unlist(geocode("Cologne")),zoom=11))+
  geom_path(data=data_merged,size=1,
            aes(x=long,y=lat,group=group,color=factor(values)))+
  labs(x="",y="")+
  theme(axis.text=element_blank(),axis.ticks=element_blank())

可以使ggmap(...)调用更简单,例如,

代码语言:javascript
复制
ggmap(get_map("Cologne"))

但是有一个问题:zoom=...参数被不同的解释,而我无法充分缩放地图。

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

https://stackoverflow.com/questions/24760992

复制
相关文章

相似问题

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