R绘图背景地图从Geotiff与ggplot2

时间:2015-10-27 03:05:02

标签: r plot ggplot2 raster

使用R基础图,我可以使用以下命令绘制任何地理基准:

library("raster")
plot(raster("geo.tiff"))

例如,下载this数据,我会执行以下操作:

setwd("C:/download") # same folder as the ZIP-File
map <- raster("smr25musterdaten/SMR_25/SMR_25KOMB_508dpi_LZW/SMR25_LV03_KOMB_Mosaic.tif")

如何在ggplot2中绘制GeoTif文件?

编辑:

1:我已使用彩色地图替换了示例文件中的灰度图,以说明缺少colortable的问题。

2:在Pascals回答的帮助下,我能够适应和改进this solution并使输入tif更具动态性。我将在下面发布答案。

3 个答案:

答案 0 :(得分:6)

以下是使用gplot包中的函数rasterVis的替代方法。

library(rasterVis)
library(ggplot2)
setwd("C:/download") # same folder as the ZIP-File
map <- raster("smr25musterdaten/SMR_25/SMR_25KGRS_508dpi_LZW/SMR25_LV03_KGRS_Mosaic.tif")

gplot(map, maxpixels = 5e5) + 
  geom_tile(aes(fill = value)) +
  facet_wrap(~ variable) +
  scale_fill_gradient(low = 'white', high = 'black') +
  coord_equal()

enter image description here

如果您想使用颜色表:

coltab <- colortable(map)
coltab <- coltab[(unique(map))+1]

gplot(map, maxpixels=5e5) + 
  geom_tile(aes(fill = value)) +
  facet_wrap(~ variable) +
  scale_fill_gradientn(colours=coltab, guide=FALSE) +
  coord_equal()

enter image description here

有颜色:

enter image description here

答案 1 :(得分:1)

我改进了解决方案并创建了一个小功能,允许直接导入ggplot(使用整齐的选项将其变为灰度)。

require(rasterVis)
require(raster)
require(ggplot2)

setwd("C:/download") # same folder as the ZIP-File
map <- raster("smr25musterdaten/SMR_25/SMR_25KOMB_508dpi_LZW/SMR25_LV03_KOMB_Mosaic.tif")

# Function to get the colourtable with the option of returing it in greyscale
getColTab <- function(rasterfile, greyscale = F){
  colTab <- raster::colortable(rasterfile)
  if(greyscale == T){
    colTab <- col2rgb(colTab)
    colTab <- colTab[1,]*0.2126 + colTab[2,]*0.7152 + colTab[3,]*0.0722
    colTab <- rgb(colTab,colTab,colTab, maxColorValue = 255)
  }
  names(colTab) <- 0:(length(colTab)-1)
  return(colTab)
}

gplot(map, maxpixels = 10e5) +
  geom_tile(aes(fill = factor(value))) +
  scale_fill_manual(values = getColTab(map),guide = "none") +
  coord_equal() 

答案 2 :(得分:0)

就像我在原始问题中提到的那样,我能够用Pascals输入和this solution来解决问题。这是颜色正确的方式:

library(rasterVis) # in order to use raster in ggplot
setwd("C:/download") # same folder as the ZIP-File

map <- raster("smr25musterdaten/SMR_25/SMR_25KOMB_508dpi_LZW/SMR25_LV03_KOMB_Mosaic.tif") # sample data from [here][2]

# turn raster into data.frame and copy the colortable
map.df <- data.frame(rasterToPoints(map))
colTab <- colortable(map)

# give the colors their apropriate names:
names(colTab) <- 0:(length(colTab) - 1) 

# only define the colors used in the raster image
from <- min(map.df[[3]], na.rm = T)+1 
to <- max(map.df[[3]], na.rm = T)+1
used_cols <- colTab[from:to] 

# plot:
gplot(map, maxpixels = 5e5) +
  facet_wrap(~ variable) +
  geom_tile(aes(fill = value)) +
  scale_fill_gradientn(colours=used_cols) +
  coord_equal()