使用 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_discete
、scale_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
我正在尝试学习如何在 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_discete
、scale_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