使用 raster() ggplot 读取 geo-tiff 文件失败,没有错误消息。是什么导致了这个错误?

Reading geo-tiff file using raster() ggplot fails with no error message. What causes this error?

我正在尝试学习如何在 R-Studio 和笔记本中导入、显示和处理 geo-tiff 文件。当我 运行 代码时,我没有收到任何错误。该图未显示,但在控制台中输入图名称会出现错误。就好像检测到错误一样,绘图仍然创建,但是 运行ning 块或 运行ning 'knit' 都没有报告错误。

fimage_plot Error: Discrete value supplied to continuous scale

我的代码块:

rlist <- list.files(tiffTestFldrOrig, pattern="tif$",
                full.names=TRUE)
for(tiff_path_nane in rlist) {
  fimage <- raster(tiff_path_nane)
  fill_col_name = names(fimage)
  fimage_df <- as.data.frame(fimage, xy = TRUE)

  fimage_plot <- ggplot() +
    geom_raster(data = fimage_df, aes(x=x, y=y, 
              fill = fill_col_name)) +
    scale_fill_continuous(type = "gradient") +
    coord_quickmap()

  fimage_plot # no plot displayed, no error
  break() # until error corrected
}

我试过 google,搜索各种 scale_fill_discetescale_fill_continous 等都无济于事。

顺便说一句,我的 x 和 y 数据是 UTM,第三列 16 位整数值代表野火的温度。

好的@Nate 我通过自己生成示例数据粗略地做了一些事情。希望它有效,这就是你想要的:

library(raster)
library(ggplot2)

r1 <- raster(nrows = 1, ncols = 1, res = 0.5, 
             xmn = -1.5, xmx = 1.5, ymn = -1.5, ymx = 1.5, vals = 0.3)
fimage <- lapply(1:10, function(i) setValues(r1,runif(ncell(r1))))
fimage_plot <- list()

for(i in 1:length(fimage)) {
  fimage_df <- as.data.frame(fimage[[i]], xy = TRUE)

  fimage_plot[[i]] <- ggplot(fimage_df, aes(x, y)) + 
    geom_raster(aes(fill = layer)) +
    guides(fill=guide_legend(title=paste0("Plot ", i))) # if you want to change the legend

  fimage_plot[[i]]  
  # break() # until error corrected
}

这不起作用,因为在:

geom_raster(data = fimage_df, aes(x=x, y=y, fill = fill_col_name))

您正在使用字符变量来指定填充。 ggplot 不喜欢这样。

您可以避免更改 fimage 的名称,然后使用

 geom_raster(data = fimage_df, aes(x=x, y=y, fill = layer)) 

如@Majid 回复,或使用 aes_string 将字符变量关联到 fill:

 geom_raster(data = fimage_df, aes_string(x="x", y="y", fill = fill_col_name)) 

(但请注意 aes_string 已被软弃用:将来它可能会停止工作,您将不得不使用 tidy evaluation。)

HTH