我找不到有关 RGoogleMaps 中的轴标签所遇到的以下问题的任何文档:
library(RgoogleMaps)
datas <- structure(list(LAT = c(37.875, 37.925, 37.775, 37.875, 37.875),
LON = c(-122.225, -122.225, -122.075, -122.075, -122.025)),
.Names = c("LAT", "LON"), class = "data.frame",
row.names = c(1L, 2L, 3L, 4L, 5L))
# Get bounding box.
boxt <- qbbox(lat = datas$LAT, lon = datas$LON)
MyMap <- GetMap.bbox(boxt$lonR, boxt$latR, destfile = "Arvin12Map.png",
maptype = "mobile")
PlotOnStaticMap(MyMap, lat = datas$LAT, lon = datas$LON,
axes = TRUE, mar = rep(4, 4))
当我在计算机上运行此命令时,水平轴的范围从 300W 到 60E,但其间的刻度不是线性间隔的(300W、200W、100W、0、100E、160W、60W)。 此外,垂直轴从 300S 线性移动到 300N。似乎无论我为数据提供什么数据,轴总是以这种方式标记。
我的问题是:
1.使用此代码的其他机器上是否也出现此问题?
2. 有谁能解释一下吗?
和
3.任何人都可以建议一种获得正确轴标签的方法(假设这些标签是“不正确的”,但也许我在某种程度上误解了情节!)?
感谢您的宝贵时间。
最佳答案
是
正如 @Andrie 所建议的,这似乎是一个错误。当
axes = TRUE
,degAxis()
PlotOnStaticMap()
调用的函数提取axTicks()
找到的漂亮刻度线的 x 和 y 绘图坐标。degAxis()
期望这些坐标位于 map 的坐标系中,但 rGoogleMaps 将它们作为像素坐标返回,从中心原点计算。绘图大小为 640 x 640 时,漂亮的刻度线在东西和南北方向上分配给 -300、-200、-100、0,100、200、300。您最终会得到 300W、200W、100W、0、100E、160W、60W,因为degreeLabelsEW()
degAxis()
调用的函数假设给定经度必须在 [-180, 180] 范围内,任何高于 180 的经度实际上都位于西半球(例如,200E 是西半球向东 20 度,即 160W)。不知道为什么它对于无意义的 N、S 和 W 坐标的表现不相似。快速解决方法,继续您的
MyMap
对象:PlotOnStaticMap(MyMap, lat = datas$LAT, lon = datas$LON, axes = FALSE, mar = rep(4.5, 4)) # x-axis xrange <- MyMap$BBOX$ur[2] - MyMap$BBOX$ll[2] xticklength <- xrange / (length(axTicks(1)) - 1) xticklabs <- seq(MyMap$BBOX$ll[2], MyMap$BBOX$ur[2], xticklength) xticklabs <- parse(text = paste(sprintf('%.2f', abs(xticklabs)), ifelse(xticklabs < 0, '*degree*W', '*degree*E'), sep='')) axis(1, at=axTicks(1), xticklabs, cex.axis=0.8) # y-axis yrange <- MyMap$BBOX$ur[1] - MyMap$BBOX$ll[1] yticklength <- yrange / (length(axTicks(2)) - 1) yticklabs <- seq(MyMap$BBOX$ll[1], MyMap$BBOX$ur[1], yticklength) yticklabs <- parse(text = paste(sprintf('%.2f', abs(yticklabs)), ifelse(yticklabs < 0, '*degree*S', '*degree*N'), sep='')) axis(2, at=axTicks(2), yticklabs, cex.axis=0.8, las=1)
关于RGoogleMaps 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258408/