Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 绘制颜色渐变在零附近发散的光栅_R_Maps_Raster_Colorbar - Fatal编程技术网

R 绘制颜色渐变在零附近发散的光栅

R 绘制颜色渐变在零附近发散的光栅,r,maps,raster,colorbar,R,Maps,Raster,Colorbar,我正在尝试绘制一张带有正负值的地图 所有正值应为红色,而负值应为蓝色,零应为白色,就像此离散颜色示例图中一样 下面是我正在使用的代码: library (rasterVis) ras1 <- raster(nrow=10,ncol=10) set.seed(1) ras1[] <- rchisq(df=10,n=10*10) ras2=ras1*(-1)/2 s <- stack(ras1,ras2) levelplot(s,par.settings=RdBuThem

我正在尝试绘制一张带有正负值的地图

所有正值应为红色,而负值应为蓝色,零应为白色,就像此离散颜色示例图中一样

下面是我正在使用的代码:

library (rasterVis)
ras1 <- raster(nrow=10,ncol=10) 
set.seed(1) 
ras1[] <- rchisq(df=10,n=10*10) 
ras2=ras1*(-1)/2 
s <- stack(ras1,ras2) 
levelplot(s,par.settings=RdBuTheme())
库(rasterVis)
ras1我写了这封信。它采用由rasterVis::levelplot
生成的
网格
对象和一个颜色渐变,并绘制颜色发散在零附近的对象

使用
s
,您可以这样使用它:

devtools::source_gist('306e4b7e69c87b1826db')
p <- levelplot(s)
diverge0(p, ramp='RdBu')

注意,如@ LuasFurTiNi中所建议的,如果您高兴地将CeloKy扩展到上和下零的相同距离,则过程要简单得多,例如:<代码> LealTrand(s,PAR设置= rdButhMee()),at=SEQ(-max(ABS(CelStat(s,Read))),max(ABS(CelStat(s,Read))),LeN=100)

这是我经常使用以下脚本执行的操作:

library(colorRamps)
col5 <- colorRampPalette(c('blue', 'gray96', 'red'))  #create color ramp starting from blue to red
color_levels=20 #the number of colors to use
max_absolute_value=0.4 #what is the maximum absolute value of raster?
plot(img, col=col5(n=color_levels), breaks=seq(-max_absolute_value,max_absolute_value,length.out=color_levels+1) , axes=FALSE)

您已经问过类似的问题:@Pascal这些问题几乎是相似的。然而,这一个使用不同的调色板,我希望白色表示零值,如上图所示。另一个问题使用RdYIBu调色板。谢谢你的帮助。你的大部分代码与你的问题无关。请提供一个简单的可复制示例,仅包含相关代码。例如,从
r@RobertH开始感谢您建议我改进可复制的示例和代码。这里有更合适的:
ras1!回答得很好,但如果我的数据两端的abs(max)值相同,则非常适合。非常感谢。我认为这种方法适用范围更广。我这样说是因为在大多数情况下,如果你想要一个以零为中心的色标,没有围绕零的对称性,那么在没有仔细检查色标的情况下,生成的地图会给出一个偏离零的偏斜视觉(即,深蓝色离零远不及深红色)。这一点尤其适用于我正在制作的气候地图。在我的例子中,数据从-10到40。举个例子,我如何利用你上面的建议来生产一款能够传达最多信息的发散型彩色放大器?谢谢你提供了一个例子。我想我上面提供的地图的作者使用了你在这里描述的技术。请使用此问题提供的示例或您自己的示例来演示如何在上面显示的地图上获得颜色条。谢谢。@LucasFortini:深蓝色和深红色的距离不太远-请注意,在我发布的示例中,渐变的下端不是“深红色”。即,斜坡被截断以匹配点上的data.jbaums。diverge0是最需要的代码。这是非常有创意的你。嗨jbaums我如何定义在下面的代码中的颜色数?也就是说,我希望
diverge0
中的颜色条与
p
中的颜色条具有相同的级别。目前它看起来像1001种颜色,但我需要10种<代码>开发工具::源代码(“306e4b7e69c87b1826db”)Uniques@aez849-这些中断有点奇怪,但对于这样的情况,可以更容易地“手动”计算出颜色向量。例如,
levelplot(s,at=my.at,col.regions=colorrmppate(brewer.pal(11,'RdBu'))(12)[4:12],colorkey=myColorkey)
。有6个正仓和3个负仓,因此我们可以沿着
RdBu
渐变创建12种颜色的向量(使用
colorRampPalette(brewer.pal(11,'RdBu'))(12)
),并排除前3个(即元素的子集
4:12
)@jbaums有没有一种方法可以使用你的函数,但也可以设置一种颜色的上限,例如黄色,这意味着饱和度?@jbaums,我刚刚发布了一个关于调整发散比例的问题,因此它是非线性的:也许你有一个想法?
library(colorRamps)
col5 <- colorRampPalette(c('blue', 'gray96', 'red'))  #create color ramp starting from blue to red
color_levels=20 #the number of colors to use
max_absolute_value=0.4 #what is the maximum absolute value of raster?
plot(img, col=col5(n=color_levels), breaks=seq(-max_absolute_value,max_absolute_value,length.out=color_levels+1) , axes=FALSE)
library(raster)
library(colorRamps)
mask_data=shapefile("D:/temp/so/Main_Hawaiian_Islands_simple3.shp")
img=raster("D:/temp/so/PPT_wet_minus_dry.tif")
col5 <- colorRampPalette(c('blue', 'gray96', 'red'))  #create color ramp starting from blue to red
color_levels=10 #the number of colors to use
max_absolute_value=max(abs(c(cellStats(img, min), cellStats(img, max)))) #what is the maximum absolute value of raster?
color_sequence=seq(-max_absolute_value,max_absolute_value,length.out=color_levels+1)
plot(img, col=col5(n=color_levels), breaks=color_sequence, axes=FALSE)
plot(mask_data, add=T)
n_in_class=hist(img, breaks=color_sequence, plot=F)$counts>0
col_to_include=min(which(n_in_class==T)):max(which(n_in_class==T))
breaks_to_include=min(which(n_in_class==T)):(max(which(n_in_class==T))+1)
plot(img, col=col5(n=color_levels)[col_to_include], breaks=color_sequence[breaks_to_include] , axes=FALSE)
plot(mask_data, add=T)