R - 如何改善 RasterVis levelplot 的颜色阴影?
R - How to improve color shading of a RasterVis 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
绘制时看起来如何清晰。颜色渐变很平滑,你看不到它们之间有任何 "contours"。然而,遗憾的是,光栅图不像水平图那样可定制。
现在,看看这个尝试对 RasterVis
做同样的事情:
# RasterVis version
levelplot(r, margin=FALSE,
par.settings=rasterTheme(viridis_pal(option = "D")(255)))
你看到这张地图不像上一张那么清晰了吗?看起来调色板的分辨率不一样,您可以看到颜色渐变之间的边缘不那么平滑。
有什么方法可以改善这种外观吗?我尝试使用 par.settings
和 col.regions
参数,但其中 none 似乎有效。我可能遗漏了什么...
使用 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
绘制的图:
我想使用 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)
我正在尝试改善水平图的颜色阴影。请看下面的代码:
# 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
绘制时看起来如何清晰。颜色渐变很平滑,你看不到它们之间有任何 "contours"。然而,遗憾的是,光栅图不像水平图那样可定制。
现在,看看这个尝试对 RasterVis
做同样的事情:
# RasterVis version
levelplot(r, margin=FALSE,
par.settings=rasterTheme(viridis_pal(option = "D")(255)))
你看到这张地图不像上一张那么清晰了吗?看起来调色板的分辨率不一样,您可以看到颜色渐变之间的边缘不那么平滑。
有什么方法可以改善这种外观吗?我尝试使用 par.settings
和 col.regions
参数,但其中 none 似乎有效。我可能遗漏了什么...
使用 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
绘制的图:
我想使用 maxpixels
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)