我想用渐变颜色绘制我的光栅层( b1_mosaic_diff
):负值应该从黄色变为红色,正数从浅蓝色变为深蓝色 .
我有一个代码示例,不幸的是没有工作(而不是渐变红色我把 heat.colors
与 topo.colors
相同,用于渐变蓝色:
plot(b1_mosaic_diff, col=ifelse(na.omit(as.data.frame(b1_mosaic_diff))<0, heat.colors(n=5), topo.colors(n=5)), main="Difference between mean & median: '+' representing higher mean")
我不想使用ggplot,因为我更容易坚持正常情节 . 这样做有可能吗?提前致谢!
1 回答
这有点繁琐,但我通常会产生
n
(例如1000)颜色与两个互补colourRampPalette
中的每一个(例如一个由红色/黄色和一个蓝色组成) . 之后,如果颜色键的两侧都没有偶数长度,我将颜色向量的颜色向量对应于颜色键的较短部分,根据它的长度作为键的较长部分的比例(这更容易用下面的例子解释) . 最后,我连接两个颜色向量并将其传递给rasterVis::levelplot
的col.regions
参数 .这是一个例子:
RColorBrewer
调色板'YlOrRd'
(我将其反转为红色>橙色>黄色,因为颜色与最负值到最正值的栅格值相关联)和'Blues'
. 这些调色板每个仅提供9种颜色,因此我们将调色板传递给colorRampPalette
以生成许多插入(插值)颜色 . 在这里,我为每个调色板生成1000种颜色 - 这足以创建一个平滑的颜色键 .我们希望颜色键跨越栅格数据集中的值范围,范围从-5到10.因此,我们需要对将用于颜色键的较短臂的颜色矢量进行子集化(负值) ,即红色) . 确切地说,我们想要删除红色向量的前500个值,因为密钥的
<0
部分是>0
部分长度的一半 . 这给我们留下了500个橙黄色的矢量(我们丢下了最红的红色),以及1000个蓝色的矢量 .levelplot
绘制栅格,这比raster
对象的常规绘图方法更灵活 . 为方便起见,我们首先创建一个下限和上限(z-limits)的向量 .要自动执行矢量子设置,可以使用以下函数:
例如:
或者,使用不同的斜坡: