我正在使用R中的“栅格”软件包从Raster文件创建一些地图。我想创建比较栅格,并并排显示几张地图。重要的是,无论每个地图中的值如何,所有地图都使用的颜色尺度相同。例如,如果MAP 1的值从0-1起,并且MAP 2的值从0-0.5起,则值为0.5的单元格在两个地图上应具有相同的颜色。

例如:

  • 地图1的值从0到1
  • 地图2的值从0到0.5
  • 颜色从红色(最低)变为绿色(最高)

我希望值为0.5的值在两个地图中具有相同的颜色(即黄色,在红色和绿色之间)。当前的行为是它在地图1中是黄色的,而在地图2中是绿色的。

我找不到做这项工作的方法。我看不到设置用于绘图函数的像素值的范围。 setMinmax()无济于事(因为'绘图始终计算值)。即使尝试通过手动设置值(例如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) ) 
有帮助吗?

解决方案

由于图像::栅格函数指定图像::基本参数可以传递(并建议使用image ::基本可能使用),因此您是否不仅指定相同的col = and breaks = rows = to to to to to to Image的所有调用::栅格?你 需要“同步”获得休息和COL论点。颜色的数量需要比断裂数量少。下面的示例基于经典的火山数据,第二版显示了如何从图像中排除一个值范围:

 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)

一个具体的例子将有助于这项工作。

其他提示

在“栅格”中还有更多工作要做,但这是一个黑客:

 library(raster)
 r1 <- r2 <- r3 <- raster(ncol=10, nrow=10)
 r1[] <- runif(ncell(r1))
 r2[] <- runif(ncell(r2)) / 2
 r3[] <- runif(ncell(r3)) * 1.5
 r3 <- min(r3, 1)
 s <- stack(r1, r2, r3)


 brk <- c(0, 0.25, 0.5, 0.75, 1)
 par(mfrow=c(1,3))
 plot(r1, breaks=brk, col=rainbow(4), legend=F)
 plot(r1, breaks=brk, col=rainbow(4), legend.only=T, box=F)
 plot(r2, breaks=brk, col=rainbow(4), legend=F)
 plot(r1, breaks=brk, col=rainbow(4), legend.only=T, box=F)
 plot(r3, breaks=brk, col=rainbow(4), legend=F)
 plot(r1, breaks=brk, col=rainbow(4), legend.only=T, box=F)

您也可以使用spplot函数(SP软件包)

 s <- stack(r1, r2, r3) 
 sp <- as(s, 'SpatialGridDataFrame')
 spplot(sp)

您也可以将值发送到GGPLOT(搜索Rasterlayer链接到一个非常大的文件,您可能会首先要这样做,然后再访问GGPLOT,请先将值发送到GGPLOT(搜索R-Sig-Geo档案以获取示例)。

r <- sampleRegular(r, size=100000, asRaster=TRUE) 

然后也许

m <- as.matrix(r)

添加为响应@Tomas的答案

我最终使用的答案是:

plot( d, col=rev( rainbow( 99, start=0,end=1 ) ), 
    breaks=seq(min(minValue( d )),max(maxValue(d)),length.out=100) ) 

现在简单的解决方案是使用Zlim选项。

plot( d, col=rev( rainbow( 99, start=0,end=1 ) ),zlim=c(0,1) )

它对我不起作用。我使用此脚本来分开色标,并根据我的数据选择更合适的颜色:

plot(d, col=rev(heat.colors(8, alpha = 1)), breaks = seq(0, 0.40, by = 0.05))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top