我正在尝试改善水平图的颜色阴影。请看下面的代码:
# 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绘图时,这张地图看起来是多么清晰。颜色阴影是平滑的,并且您看不到它们之间的任何“轮廓”。然而,可悲的是,光栅图不像However图那样可定制。
现在,让我们看一下对RasterVis执行相同操作的尝试
# RasterVis version
levelplot(r, margin=FALSE,
par.settings=rasterTheme(viridis_pal(option = "D")(255)))

你看到这张地图没有上一张那么锐利了吗?它看起来调色板没有相同的分辨率,你可以看到颜色梯度之间的边缘是如何不平滑的。
有什么方法可以改善这个外观吗?我尝试过使用par.settings和col.regions参数,但它们似乎都不起作用。我可能漏掉了什么..。
发布于 2019-08-08 06:28:10
对于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绘制的图

发布于 2021-05-22 01:13:57
我想推荐一个使用maxpixels的选项3
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)

https://stackoverflow.com/questions/57400132
复制相似问题