AF7*_*AF7 11 r latitude-longitude ggplot2 axis-labels ggmap
我有一个ggplot地图,例如:
library(ggmap)
ggmap(get_map())
Run Code Online (Sandbox Code Playgroud)
我希望轴标签自动标记为NS/WE:在上述情况下,例如,它应该显示95.4°E而不是lon -95.4.
我试图弄乱scales包和使用scale_x_continuous和scale_y_continuous标签和打破选项,但我没有设法让它工作.
拥有一个scale_y_latitude和那将是非常棒的scale_x_longitude.
编辑:感谢@Jaap的回答,我得到了以下内容:
scale_x_longitude <- function(xmin=-180, xmax=180, step=1, ...) {
ewbrks <- seq(xmin,xmax,step)
ewlbls <- unlist(lapply(ewbrks, function(x) ifelse(x < 0, paste(x, "W"), ifelse(x > 0, paste(x, "E"),x))))
return(scale_x_continuous("Longitude", breaks = ewbrks, labels = ewlbls, expand = c(0, 0), ...))
}
scale_y_latitude <- function(ymin=-90, ymax=90, step=0.5, ...) {
nsbrks <- seq(ymin,ymax,step)
nslbls <- unlist(lapply(nsbrks, function(x) ifelse(x < 0, paste(x, "S"), ifelse(x > 0, paste(x, "N"),x))))
return(scale_y_continuous("Latitude", breaks = nsbrks, labels = nslbls, expand = c(0, 0), ...))
}
Run Code Online (Sandbox Code Playgroud)
哪个效果很好.但由于某些原因,我的R似乎不喜欢基点前面的度数符号...它显示为一个简单的点,例如经度-24变为24..W
Jaa*_*aap 16
不幸的是,没有这样的事情scale_x_longitude或scale_y_latitude尚未.与此同时,这里有一个解决方法,您可以在其中预先指定标签:
# load the needed libraries
library(ggplot2)
library(ggmap)
# get the map
m <- get_map(location=c(lon=0,lat=0),zoom=5)
# create the breaks- and label vectors
ewbrks <- seq(-10,10,5)
nsbrks <- seq(-10,10,5)
ewlbls <- unlist(lapply(ewbrks, function(x) ifelse(x < 0, paste(x, "°E"), ifelse(x > 0, paste(x, "°W"),x))))
nslbls <- unlist(lapply(nsbrks, function(x) ifelse(x < 0, paste(x, "°S"), ifelse(x > 0, paste(x, "°N"),x))))
# create the map
ggmap(m) +
geom_blank() +
scale_x_continuous(breaks = ewbrks, labels = ewlbls, expand = c(0, 0)) +
scale_y_continuous(breaks = nsbrks, labels = nslbls, expand = c(0, 0)) +
theme(axis.text = element_text(size=12))
Run Code Online (Sandbox Code Playgroud)
这使:
要获得函数中的度数,可以提高oas上标(这将绕过对特殊符号的需要):
scale_x_longitude <- function(xmin=-180, xmax=180, step=1, ...) {
xbreaks <- seq(xmin,xmax,step)
xlabels <- unlist(lapply(xbreaks, function(x) ifelse(x < 0, parse(text=paste0(x,"^o", "*W")), ifelse(x > 0, parse(text=paste0(x,"^o", "*E")),x))))
return(scale_x_continuous("Longitude", breaks = xbreaks, labels = xlabels, expand = c(0, 0), ...))
}
scale_y_latitude <- function(ymin=-90, ymax=90, step=0.5, ...) {
ybreaks <- seq(ymin,ymax,step)
ylabels <- unlist(lapply(ybreaks, function(x) ifelse(x < 0, parse(text=paste0(x,"^o", "*S")), ifelse(x > 0, parse(text=paste0(x,"^o", "*N")),x))))
return(scale_y_continuous("Latitude", breaks = ybreaks, labels = ylabels, expand = c(0, 0), ...))
}
ggmap(m) +
geom_blank() +
scale_x_longitude(xmin=-10, xmax=10, step=5) +
scale_y_latitude(ymin=-10, ymax=10, step=5) +
theme(axis.text = element_text(size=12))
Run Code Online (Sandbox Code Playgroud)
这给出了以下地图:
我用来geom_blank说明所需的效果.您当然可以使用其他geom(例如geom_point)在地图上绘制数据.
| 归档时间: |
|
| 查看次数: |
3637 次 |
| 最近记录: |