我正在使用R中的"光栅"包从光栅文件创建一些地图.我想创建比较光栅,并排显示几个地图.重要的是,无论每个地图中的值如何,所使用的颜色比例对于所有地图都是相同的.例如,如果地图1的值为0-1,而地图2的值为0-0.5,则值为0.5的单元格在两个地图上应具有相同的颜色.
例如:
我希望值为0.5以在两个地图中具有相同的颜色(即黄色,红色和绿色之间).目前的行为是它在地图1中是黄色,在地图2中是绿色.
我无法找到一种方法来完成这项工作.我看不出有任何方法可以设置用于绘图功能的像素值范围.setMinMax()没有帮助(因为'plot'总是计算值).即使尝试手动设置值(例如g1 @ data @ max < - 10)也不起作用(绘图时会忽略这些值).
最后,制作一堆地图(可能预期在同一色标上绘制所有内容)也不起作用 - 每个地图仍然有自己的色标.
有关如何做到这一点的任何想法?
编辑:
我最终使用的解决方案是:
plot( d, col=rev( rainbow( 99, start=0,end=1 ) ), breaks=seq(min(minValue( d )),max(maxValue(d)),length.out=100) )
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 10
由于image :: raster函数指定可以传递image :: base参数(并建议可能使用了image :: base),所以你不能只为所有对image的调用指定相同的col =和breaks =参数::光栅?你也需要得到休息和山坳参数"同步".颜色数量需要比中断数量少一个.以下示例基于经典火山数据,第二个版本显示如何从图像中排除一系列值:
x <- 10*(1:nrow(volcano))
y <- 10*(1:ncol(volcano))
image(x, y, volcano, col = terrain.colors( length(seq(90, 200, by = 5))-1), axes = FALSE, breaks= seq(90, 200, by = 5) )
axis(1, at = seq(100, 800, by = 100))
axis(2, at = seq(100, 600, by = 100))
box()
title(main = "Maunga Whau Volcano", font.main = 4)
x <- 10*(1:nrow(volcano))
y <- 10*(1:ncol(volcano))
image(x, y, volcano, col = terrain.colors( length(seq(150, 200, by = 5))-1), axes = FALSE, breaks= seq(150, 200, by = 5) )
axis(1, at = seq(100, 800, by = 100))
axis(2, at = seq(100, 600, by = 100))
box()
title(main = "Maunga Whau Volcano Restricted to elevations above 150", font.main = 4)
Run Code Online (Sandbox Code Playgroud)
一个具体的例子可以帮助这项工作.
添加作为回应@Tomas的答案
我最终使用的答案是:
plot( d, col=rev( rainbow( 99, start=0,end=1 ) ),
breaks=seq(min(minValue( d )),max(maxValue(d)),length.out=100) )
Run Code Online (Sandbox Code Playgroud)
现在,简单的解决方案是使用zlim选项。
plot( d, col=rev( rainbow( 99, start=0,end=1 ) ),zlim=c(0,1) )
Run Code Online (Sandbox Code Playgroud)