在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()期望这些坐标位于地图的坐标系中,但rGoogleMaps会将它们作为像素坐标返回,该坐标是从中心原点算出的。绘图尺寸为640 x 640时,漂亮的刻度线分别在E-W和N-S方向上分配给-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)

关于r - RGoogleMaps轴,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6258408/

10-10 00:46