2011-06-06 23 views
3

我无法找到下面的问题我在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.任何人都可以提出一个方法来得到正确的坐标轴标签(假设这些是“不正确”,但也许我莫名其妙误解的情节!)?

谢谢你的时间。

+2

这似乎是在代码中的错误。如果忽略度数符号,您会注意到两个坐标轴上的曲线在-320到+320之间标注。这与绘图大小相同(即640乘以640)。我没有跟踪所有的代码,但我怀疑经度和纬度没有传递给轴标签。您可能希望联系软件包维护人员。 – Andrie 2011-06-07 06:31:25

回答

1
  1. 由于@Andrie建议,这似乎是一个错误。当axes = TRUE,该degAxis()功能通过PlotOnStaticMap()称为提取X和Y坐标的情节由axTicks()发现漂亮的刻度线的。 degAxis()期望这些COORDS是地图的坐标系中,但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坐标。

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

我很久以前就需要这个,但这似乎是一个可行的解决方法!我认为这可能甚至随着剧情的利润率,使轴标签实际上是地图本身之外搞乱提高到一定程度,但我没有动机在这个项目上的任何更多的工作。无论如何,做得好,希望别人会觉得这很有用! – Rguy 2012-02-04 20:45:52

+0

实际上,我害怕我的解决方案不正确......无论指定的“mar”如何,用作刻度标签的坐标都是常量。抱歉。 – jbaums 2012-02-05 07:40:04