我试图在r上的栅格堆栈上绘制kmeans分析的输出,我在标题中返回了错误。这是我的输出栅格:
unsuperClass results
*************** Map ******************
$map
class : RasterLayer
dimensions : 48219, 90691, 4373029329 (nrow, ncol, ncell)
resolution : 10, 10 (x, y)
extent : 3909190, 4816100, 2404810, 2887000 (xmin, xmax, ymin, ymax)
crs : +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs
source : r_tmp_2021-10-19_154600_2028_56752.grd
names : layer
values : 1, 4 (min, max)
可以看到,为了进行分析,我使用了"unsuperClass"功能在RStoolbox。以及返回错误的代码:
plot(unCrasterresult)
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' is a list, but does not have components 'x' and 'y'
我知道我需要调用类似
的东西plot(unCrasterresult$x, unCrasterresult$y)
和设置限制,但我不知道具体如何组织代码。
编辑:我也试过这个代码,但无济于事
plot(unCrasterresult, xlim=c(3909190, 4816100), ylim=c(2404810, 2887000))
如果你在网上搜索" unsuperClass rstoolbox ";第一个hit是:
https://www.rdocumentation.org/packages/RStoolbox/versions/0.2.6/topics/unsuperClass
因此我们可以推断您已经安装并加载了RStoolbox
包。查看正在使用的函数的文档,我们看到一个示例:
library(raster)
input <- brick(system.file("external/rlogo.grd", package="raster"))
## Plot
olpar <- par(no.readonly = TRUE) # back-up par
par(mfrow=c(1,2))
plotRGB(input)
## Run classification
set.seed(25)
unC <- unsuperClass(input, nSamples = 100, nClasses = 5, nStarts = 5)
unC
## Plots
colors <- rainbow(5)
plot(unC$map, col = colors, legend = FALSE, axes = FALSE, box = FALSE)
legend(1,1, legend = paste0("C",1:5), fill = colors,
title = "Classes", horiz = TRUE, bty = "n")
par(olpar) # reset par
所以这样一个对象的map元素是一个S4类对象,类为"RasterLayer":
str(unC$map)
Formal class 'RasterLayer' [package "raster"] with 12 slots
..@ file :Formal class '.RasterFile' [package "raster"] with 13 slots
.. .. ..@ name : chr ""
.. .. ..@ datanotation: chr "FLT4S"
.. .. ..@ byteorder : chr "little"
.. .. ..@ nodatavalue : num -Inf
#--- abbreviated the console output, note that this is an S4 object
这表明您可能成功使用:
plot(unCrasterresult$map)
必须为RasterLayer"类的S4对象定义一个基本绘图方法。RStoolbox
或raster
包。我关于这个包的特点是新的或模糊的评论是基于我没有找到任何先前提到这个职业的,但是这个包自2015年以来一直存在,并且一直在积极维护。如果您在SE站点上发布GIS问题,您可能会立即从了解该功能和包的当前用户那里得到答案。参见:https://gis.stackexchange.com/search?q=unsuperClass。还有一个R-SIG空间邮件列表:r-sig-geo
.
您需要加载栅格包才能绘制RasterLayer
。像这样:
library(raster)
plot(unsuperClasresult$map)