gpt4 book ai didi

r - 设置 ggplot 中纬度和经度轴标签的格式

转载 作者:行者123 更新时间:2023-12-02 05:54:45 26 4
gpt4 key购买 nike

我有一个 ggplot map ,例如:

library(ggmap)
ggmap(get_map())

我希望轴标签自动标记为 N-S/W-E:例如,在上述情况下,应该显示 95.4°E,而不是 lon -95.4。

我试图弄乱 scales 包并使用 scale_x_continuousscale_y_continuous 标签和中断选项,但我没有成功它有效。

如果有 scale_y_latitudescale_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), ...))
}

效果非常好。但由于某种原因,我的 R 似乎不喜欢基点前面的度数符号......它显示为一个简单的点,例如经度 -24 变为 24..W

最佳答案

不幸的是,目前还没有 scale_x_longitudescale_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))

给出:

enter image description here

<小时/>

要获取函数中的度数,您可以将 o 作为上标(这将避免使用特殊符号):

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))

给出了以下 map :

enter image description here

我使用geom_blank只是为了说明所需的效果。您当然可以使用其他几何对象(例如 geom_point)在 map 上绘制数据。

关于r - 设置 ggplot 中纬度和经度轴标签的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com