R - 使用 ggplot2- 和 raster-packages 地理引用光栅图像的原始颜色

标签 r ggplot2 tiff raster geotiff

我想用原版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/

相关文章:

wpf - 立即将图像加载到内存中

r - 如何在拼凑而成的图形中调整带有plot_annotation标签的字体样式?

r - 自动从一个对象中提取多个变量

r - R 中具有对数轴的散点图矩阵

r - ggplot : re-order categorical y-axis (Gantt chart)

r - 如何在ggplot中设置某些轴的图例

重新编码具有许多值(包括 NA)的数值变量

r - 如果 Sequence <= 3 则将所有值解码为零,并保留某些信息

java - 将 PNG 转换为 TIFF-Java 时出错

python - 在Jupyter笔记本中使用OpenCV查看tif图像文件