3

我正在尝试改善 levelplot 的颜色阴影。请看下面的代码:

# Load required packages
library(raster)
library(rasterVis)
library(viridis)

# Download file
download.file('https://www.dropbox.com/s/caya1ja5ukpih9e/raster_thiago.tif?dl=1',
              destfile="~/Desktop/raster_thiago.tif", method="auto")

# Open file
r <- readAll(raster("~/Desktop/raster_thiago.tif"))

# Raster version
plot(r, col=viridis_pal(option="D")(255))

在此处输入图像描述

请注意使用 绘制时这张地图看起来很清晰raster::plot。颜色阴影是平滑的,你看不到它们之间的任何“轮廓”。然而,遗憾的是,光栅图不像水平图那样可定制。

现在,看看这个尝试做同样的事情RasterVis

# RasterVis version
levelplot(r, margin=FALSE,
          par.settings=rasterTheme(viridis_pal(option = "D")(255)))

在此处输入图像描述

你看到这张地图不像上一张那么锐利了吗?看起来调色板没有相同的分辨率,您可以看到颜色渐变之间的边缘不那么平滑。

有什么办法可以改善这种外观吗?我尝试过使用par.settingsandcol.regions参数,但它们似乎都不起作用。我可能错过了一些东西......

4

2 回答 2

4

使用levelplot(),您还需要显式提供一个参数,一个数值向量,给出颜色对应at =的级别之间的断点。col.regions =这是一个简单的可重现示例:

library(rasterVis)
library(viridis)

## Example raster
f <- system.file("external/test.grd", package="raster")
r <- raster(f)

## Option 1: Use `at=` and `col.regions=` to set color gradient
nlev <- 200
my.at <- seq(from = cellStats(r, "min"),
             to = cellStats(r, "max"),
             length.out = nlev + 1)
my.cols <- viridis_pal(option = "D")(nlev)
levelplot(r, margin = FALSE,
          at = my.at,
          col.regions = my.cols)


## Option 2: Pass options via `par.settings = rasterTheme()`
##
## (NOTE: this only works for nlev up to 100)
nlev <- 100
my.at <- seq(cellStats(r, "min"), cellStats(r, "max"),
             length.out = nlev + 1)
my.theme <- rasterTheme(viridis_pal(option = "D")(nlev))
levelplot(r, margin = FALSE,
          at = my.at,
          par.settings = my.theme)

nlev = 10要查看这是否有效,请比较使用和绘制的图nlev = 200

在此处输入图像描述

于 2019-08-07T22:28:09.793 回答
2

我想建议使用选项 3maxpixels

require(raster)
require(rasterVis)

pal=colorRampPalette(c("#4575B4","#74ADD1","#E0F3F8","white","#FEE090","#F46D43","#D73027"))
proj <- CRS('+proj=longlat +datum=WGS84')

df <- expand.grid(x = seq(-2, 2, .01), y = seq(-2, 2, .01))
df$z <- with(df, (3*x^2 + y)*exp(-x^2-y^2))
r <- rasterFromXYZ(df, crs=proj)

my.brks=seq(-0.6,1.2,by=0.2)
my.labels=as.character(round(my.brks,digits=1))

默认图

levelplot(r, col.regions=pal, margin=FALSE,at=my.brks,scales=list(draw=FALSE),xlab=NULL,ylab=NULL)

在此处输入图像描述

如果设置了 maxpixels,结果看起来更平滑,就像 raster::plot()

levelplot(r, col.regions=pal, margin=FALSE,at=my.brks,scales=list(draw=FALSE),xlab=NULL,ylab=NULL, maxpixels = 1e6)

在此处输入图像描述

于 2021-05-21T17:13:56.953 回答