内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/18136468/is-there-a-way-to-add-a-scale-bar-for-linear-distances-to-ggmap
ggmap(get_map(location="Kinston, NC", zoom=12, maptype='hybrid'))+
geom_point(x=-77.61198,y=35.227792, colour="red", size=5)+
geom_point(x=-77.57306, y=35.30288, colour="blue", size=3)+
geom_point(x=-77.543, y=35.196, colour="blue",size=3)+
geom_text(x=-77.575, y=35.297, label="CRONOS Data")+
geom_text(x=-77.54, y=35.19, label="NOAA")+
geom_text(x=-77.61, y=35.22, label="PP Site")
有一些事情你需要做,以实现这一点.
首先将数据放入data.frame()中:
sites.data = data.frame(lon = c(-77.61198, -77.57306, -77.543),
lat = c(35.227792, 35.30288, 35.196),
label = c("PP Site","NOAA", "CRONOS Data"),
colour = c("red","blue","blue"))
现在我们可以使用gg_map包获取该地区的地图:
require(gg_map)
map.base <- get_map(location = c(lon = mean(sites.data$lon),
lat = mean(sites.data$lat)),
zoom = 10) # could also use zoom = "auto"
我们需要该图像的范围:
bb <- attr(map.base,"bb")
现在我们开始了解规模.首先,我们需要一个函数给我们两点之间的距离,基于lat / long.为此,我们使用Haversine公式,由Floris在 Calculate distance in (x, y) between two GPS-Points 描述:
distHaversine <- function(long, lat){
long <- long*pi/180
lat <- lat*pi/180
dlong = (long[2] - long[1])
dlat = (lat[2] - lat[1])
# Haversine formula:
R = 6371;
a = sin(dlat/2)*sin(dlat/2) + cos(lat[1])*cos(lat[2])*sin(dlong/2)*sin(dlong/2)
c = 2 * atan2( sqrt(a), sqrt(1-a) )
d = R * c
return(d) # in km
}
下一步是找出将定义我们的比例尺的点.对于这个例子,我把东西放在情节的左下角,使用我们已经想到的边框:
sbar <- data.frame(lon.start = c(bb$ll.lon + 0.1*(bb$ur.lon - bb$ll.lon)),
lon.end = c(bb$ll.lon + 0.25*(bb$ur.lon - bb$ll.lon)),
lat.start = c(bb$ll.lat + 0.1*(bb$ur.lat - bb$ll.lat)),
lat.end = c(bb$ll.lat + 0.1*(bb$ur.lat - bb$ll.lat)))
sbar$distance = distHaversine(long = c(sbar$lon.start,sbar$lon.end),
lat = c(sbar$lat.start,sbar$lat.end))
最后,我们可以用比例绘制地图.
ptspermm <- 2.83464567 # need this because geom_text uses mm, and themes use pts. Urgh.
map.scale <- ggmap(map.base,
extent = "normal",
maprange = FALSE) %+% sites.data +
geom_point(aes(x = lon,
y = lat,
colour = colour)) +
geom_text(aes(x = lon,
y = lat,
label = label),
hjust = 0,
vjust = 0.5,
size = 8/ptspermm) +
geom_segment(data = sbar,
aes(x = lon.start,
xend = lon.end,
y = lat.start,
yend = lat.end)) +
geom_text(data = sbar,
aes(x = (lon.start + lon.end)/2,
y = lat.start + 0.025*(bb$ur.lat - bb$ll.lat),
label = paste(format(distance,
digits = 4,
nsmall = 2),
'km')),
hjust = 0.5,
vjust = 0,
size = 8/ptspermm) +
coord_map(projection="mercator",
xlim=c(bb$ll.lon, bb$ur.lon),
ylim=c(bb$ll.lat, bb$ur.lat))
然后我们保存它
# Fix presentation ----
map.out <- map.scale +
theme_bw(base_size = 8) +
theme(legend.justification=c(1,1),
legend.position = c(1,1))
ggsave(filename ="map.png",
plot = map.out,
dpi = 300,
width = 4,
height = 3,
units = c("in"))
这给你这样的东西:
好的是,所有的绘图使用ggplot2(),所以你可以使用 http://ggplot2.org 的文档,使你看起来如何需要.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/18136468/is-there-a-way-to-add-a-scale-bar-for-linear-distances-to-ggmap
以上所述就是小编给大家介绍的《有没有办法为ggmap添加比例尺(线性距离)?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- *Matlab—线性回归方程式与线性系统
- [译] JavaScript 线性代数:使用 ThreeJS 制作线性变换动画
- 线性回归背后的数学
- PyTorch 学习:线性回归
- 数据结构-线性表
- 线性回归数学推导
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
An Introduction to the Analysis of Algorithms
Robert Sedgewick、Philippe Flajolet / Addison-Wesley Professional / 1995-12-10 / CAD 67.99
This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discre......一起来看看 《An Introduction to the Analysis of Algorithms》 这本书的介绍吧!