我有压缩形状文件。 我想将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")
答案 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))
这些不是一个优雅的解决方案,但应该能够很好地用于制作演示或出版的数字。