使用 ggplot2 从 Geotiff 绘制背景图
R plot background map from Geotiff with ggplot2
使用 R 底图,我可以使用以下命令绘制任何 geotiff:
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: 我已经用彩色地图替换了示例文件中的灰度地图,以说明缺少颜色表的问题。
2:在 Pascals 答案的帮助下,我能够适应和改进 this solution 并使其对输入的 tif 更加动态。我会post下面的答案。
这是使用 rasterVis
包中的函数 gplot
的替代方法。
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()
如果要使用颜色table:
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()
颜色:
正如我在最初的问题中指出的那样,我能够使用 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()
我改进了解决方案并创建了一个允许直接导入 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()
使用 R 底图,我可以使用以下命令绘制任何 geotiff:
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: 我已经用彩色地图替换了示例文件中的灰度地图,以说明缺少颜色表的问题。
2:在 Pascals 答案的帮助下,我能够适应和改进 this solution 并使其对输入的 tif 更加动态。我会post下面的答案。
这是使用 rasterVis
包中的函数 gplot
的替代方法。
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()
如果要使用颜色table:
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()
颜色:
正如我在最初的问题中指出的那样,我能够使用 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()
我改进了解决方案并创建了一个允许直接导入 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()