RGoogleMaps 轴

标签 r axes rgooglemaps

我找不到有关 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.任何人都可以建议一种获得正确轴标签的方法(假设这些标签是“不正确的”,但也许我在某种程度上误解了情节!)?

感谢您的宝贵时间。

最佳答案

  1. 正如 @Andrie 所建议的,这似乎是一个错误。当axes = TRUEdegAxis() 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 坐标的表现不相似。

  2. 快速解决方法,继续您的 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/

相关文章:

返回行中最后一个值 <> NA 的列名称

r - 使用 `readxl` 包对彩色单元格进行分类

XPath 表达式 - 层次结构

matlab - 在 Matlab 中如何交换现有绘图的水平轴和垂直轴

linux - readChar 错误(con,5L,useBytes = TRUE): cannot open the connection

r - 汇总了海量数据,如何用R来处理?

r - 如何将 df 列表中的所有 POSIXt 更改为字符

javascript - Highcharts:在单个类别中绘制多个值

r - 获取指定边界坐标的 map

r - 包 "RgoogleMaps"错误 HTTP 状态为 '403 Forbidden'