我想用原版colortable
的 >>georeferenced raster image<< (tif 文件)作为彩色比例 在 ggplot/ggplot2 绘制的 map 中 .
由于找不到更简单的解决方案,我访问了 colortable
-插槽来自 legend
-加载的光栅图像(对象)的属性raster1
像这样:
raster1 <- raster(paste(workingDir, "/HUEK200_Durchlaessigkeit001_proj001.tif", sep="", collapse=""))
raster1.pts <- rasterToPoints(raster1)
raster1.df <- data.frame(raster1.pts)
colTab <- attr(raster1, "legend")@colortable
好的,到目前为止一切顺利。现在我只需要申请
colortable
作为我现有情节的彩色比例:(ggplot(data=raster1.df)
+ geom_tile(aes(x, y, fill=raster1.df[[3]]))
+ scale_fill_gradientn(values=1:length(colTab), colours=colTab, guide=FALSE)
+ coord_fixed(ratio=1)
)
不幸的是,这不能按预期工作。生成的图像除了白色和典型的 ggplot-grey 之外没有显示任何颜色,当没有定义自定义值时,通常会出现这种颜色。目前,我有点不知道这里到底有什么问题。我假设基础波段值存储在
raster1.df[[3]]
中是颜色表的索引。这可能是错误的。如果是错误的,那么带值如何与colortable
相关联?即使我的假设是正确的:我给 scale_fill_gradientn()
的参数仍然应该导致更丰富多彩的情节,不是吗?我检查了唯一值是什么:sort(unique(raster1.df[[3]]))
这输出:
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12
显然,并非
colortable
的 256 名成员中的所有成员。使用它提醒我颜色并不总是需要反射(reflect)底层波段数据分布(尤其是在包含多个波段时)。我希望,我最后的想法没有让您对目标非常简单这一事实感到困惑。
感谢您的帮助!
最佳答案
好的,我找到了一个可能不适用于所有地理引用光栅图像的答案,但可能几乎适用。
首先,我假设数据值确实代表颜色选择是错误的。 colortable
中有 15 种独特的颜色空间栅格对象。但是,并非所有这些都被使用(14 和 15)。好的,现在我知道了,我必须以 scale_fill_gradientn
的方式将我的值映射到相应的颜色。明白。为此,我使用我之前的初始代码片段并定义一个新变量 valTab
它存储给定波段的所有唯一数据值:
raster1 <- raster(paste(workingDir, "/HUEK200_Durchlaessigkeit001_proj001.tif", sep="", collapse=""))
raster1.pts <- rasterToPoints(raster1)
raster1.df <- data.frame(raster1.pts)
raster1.img <- melt(raster1)
colTab <- attr(raster1, "legend")@colortable
names(colTab) <- 0:(length(colTab) - 1)
valTab <- sort(unique(raster1.df[[3]]))
请注意,如何为
colTab
定义索引名称- 这很快就会很重要。有了这个,我可以在绘图时自动将所有事件颜色与其各自的值相关联:(ggplot(data=raster1.df)
+ geom_tile(aes(x, y, fill=raster1.df[[3]]))
+ scale_fill_gradientn(colours=colTab[as.character(valTab)])
+ coord_fixed(ratio=1)
)
使用
valTab
-members 作为对相应颜色索引的引用有助于始终仅选择所需的颜色。我不知道是否定义了 values
- scale_fill_gradientn()
的参数在某些情况下是必要的。我不确定
raster()
是否读取了光栅图像总是从 0
开始定义它们的值.如果没有,names(colTab) <- 0:(length(colTab) - 1)
需要调整。我希望,这对将来的某人有所帮助。至少,我终于有办法了!
关于R - 使用 ggplot2- 和 raster-packages 地理引用光栅图像的原始颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196923/