【问题标题】:Plot the map (raster file) in R, ggplot2 in particular在 R 中绘制地图(光栅文件),特别是 ggplot2
【发布时间】:2017-05-12 02:10:41
【问题描述】:

我想绘制澳大利亚气候区的地图。相关文件(ASCII 文件)已下载自:http://www.bom.gov.au/web01/ncc/www/climatology/climate-classification/kpngrp.zip

原始地图是这样的。

但是当我使用 ASCII 文件重新绘制这张地图时,我无法制作它。使用的代码是:

library(ggplot2);library(raster)
r<-raster("kpngrp.txt")
plot(r)

如何解决这个问题以绘制地图?

【问题讨论】:

  • 该栅格中有超过 6 个级别 unique(getValues(r))
  • 感谢您的信息。你有使用光栅文件制作地图的方法吗?

标签: r dictionary ggplot2 raster r-raster


【解决方案1】:

您首先必须正确读取数据集,该数据集不是栅格文件,而是 txt。标题的第一行提供有关“格式”和地理参考的信息:

ncols 1681
nrows 1361
xllcorner 112
yllcorner -44
像元大小 0.025
NODATA_value -9999

要正确读取数据并将其转换为raster 对象,您可以这样做:

infile <- "/home/lb/Temp/buttami/kpngrp.txt"
data <- as.matrix(read.table(infile, skip = 6)) 
data[data == -9999] = NA
rr <- raster(data, crs = "+init=epsg:4326")
extent(rr) = c(112, 112+0.025*1681, -44, -44+0.025*1361)

> rr
class       : RasterLayer 
dimensions  : 1361, 1681, 2287841  (nrow, ncol, ncell)
resolution  : 0.025, 0.025  (x, y)
extent      : 112, 154.025, -44, -9.975  (xmin, xmax, ymin, ymax)
coord. ref. : +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 42  (min, max)

现在,要绘制它,您可以使用多种方法。但是,要获得好的结果,您首先必须通过使用矢量 shapefile 进行屏蔽来删除“海洋”数据:

adm <- getData("GADM", country="AUS", level=1)
rr = mask(rr, adm)
plot(rr)

请注意,该图显示的“颜色”比您的示例更多,因为我认为它们按更大的“类别”聚合了 Koppen 区域。要获得与此类似的映射,您必须将原始 ASCII 的多个值“连接”到较少数量的类中。

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多