地理参照栅格图像的原始颜色我想使用原始colortable
的>>georeferenced raster image<<(TIF文件),如由ggplot/GGPLOT2绘制的地图比例尺着色。的R - 使用ggplot2-和光栅包
由于没有找到一个更简单的解决方案,我访问的colortable
-Slot从legend
-attribute加载的光栅图像(对象)的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-gray。此刻,我有点无知,这里其实是错误的。我假定存储在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名成员都使用这让我想起了颜色并不总是需要反思潜在的频段数据分布(尤其是包含多个频段时)。
我希望,我最后的想法并没有把你的目标搞得很直截了当。
谢谢你的帮助!
这次解决方案太明显或太隐藏了吗? :) –
好吧,现在我知道问题出在哪里了:'scale_fill_gradientn'函数的'values'参数只接受0和1之间的值。我必须手动缩放这种向量以获得'colortable '。完成后我会将它作为答案发布。但是,仍然存在一个问题:栅格图块后面的栅格数据值不会完全反射所有使用的颜色,因为tif图像使用白色作为无值,使用黑色来勾勒区域。必须有一种方法可以获取每个栅格像素/图块的原始颜色值。 –
如果地理参考图像包含图案而不是简单的颜色填充,则颜色数量和带数据值之间的差异会更加清晰。每个单元可以有很多不同的颜色,这取决于它的图案以及是否有边框等等。 –