在ggplot2中显示Long Lat代替Easting和Northing

时间:2014-02-15 22:38:56

标签: r ggplot2 latitude-longitude raster

我有压缩形状文件。 我想将xlables和ylables改为等效的经度和纬度值,而不是Eastings和Northings。请建议我如何显示纬度和经度代替这个北方和东方。当我将shapefile的投影更改为WGS1984但这会扭曲该区域并且我不想这样做时,它会起作用。 我的代码是

library(raster)
library(RColorBrewer)
library(ggplot2)
library(ncdf)
poly<-shapefile("Test_poly.shp", stringsAsFactors=FALSE, verbose=FALSE)
ggplot(poly) +
  aes(long,lat,group=group, fill = id) +
  geom_polygon() +
  geom_path(color="white") +
  coord_equal() +
  scale_fill_brewer("Bydeler")

1 个答案:

答案 0 :(得分:1)

(感谢您更新shapefile。但是我也发现我需要在我的系统上安装proj并安装rgdal R软件包。也许值得一提?或许这只是反映了我不做的事实很多空间工作在R)

最终,我不认为ggplot2有一个内置系统,可以在轴上使用不同的映射单元。我在这里介绍的是变通方法,有点难看,但应该有效。

要获得Lat和Long轴,您可以选择将shapefile直接转换为lat和long。 E.g:

poly <- shapefile("Test_poly.shp", stringsAsFactors=FALSE, verbose=FALSE)
poly <- spTransform(poly, CRS("+proj=longlat +ellps=GRS80"))

ggplot(poly2) +
    aes(long,lat,group=group, fill = id) +
    ylim(c())+
    xlim(c(1324794,1341700)) + 
    geom_polygon() +
    geom_path(color="white") +
    coord_equal() +
    scale_fill_brewer("Bydeler")

正如您所指出的,这会扭曲地图。我认为这是因为一个lat单位之间的差异与一个lon单位之间的差异不同,但是你告诉ggplot使用相等的坐标。

我能看到的最好的工作是弄清楚在这种情况下lat和lon之间的比率是什么,并用coord_fixed(ratio = X)(其中X是比率)指定,而不是使用coord_equal()。

您应该能够通过打印poly个对象并比较&#39;范围&#39;来计算出这个比率。在未转换和转换的形状对象之间:

> poly
    class       : SpatialPolygonsDataFrame 
    features    : 7 
    extent      : 1211747, 1466285, 728771.9, 999422.3  (xmin, xmax, ymin, ymax)
    coord. ref. : +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0 
    variables   : 1
    names       : Id 
    min values  :  0 
    max values  :  0

或者你可以使用原始的shapefile,然后使用手动轴标签来获得lat和lon,例如scale_y_continuous(breaks = c(700000, 800000, 900000,1000000), labels = c(51,52,53,54))

这些不是一个优雅的解决方案,但应该能够很好地用于制作演示或出版的数字。