【问题标题】:how to insert x and y label and tick marks in autoKrige?如何在 autoKrige 中插入 x 和 y 标签和刻度线?
【发布时间】:2014-10-09 02:01:53
【问题描述】:

使用了两个数据集:

  1. 3 列中的空间数据(x、y、数据)

  2. 2 列 (x, y) 中的网格数据

automap 包 autoKrige 进行克里金的计算,可以在没有 x 和 y 刻度线和标签的情况下绘制:

plot(kriging_result)
automapPlot(kriging_result$krige_output, "var1.pred", sp.layout = list("sp.points", shimadata), main="OK without grids", xlab="x", ylab="y")

当我使用 ggplot2 包时,它会显示错误,但是它会计算克里金法:

mydata<-read.table("D:/.../mydata.txt",header=T,sep=",")
#Renaming desired columns:
x<-mydata[,1]
y<-mydata[,2]
waterelev<-mydata[,3]
library(gstat)
coordinates(mydata)=~x+y
library(ggplot2)
theme_set(theme_bw())
library(scales)
library(automap)
grids<-read.table("D:/.../grids.txt",header=T,sep=",")
gridded(grids)=~x+y
kriging_result = autoKrige(log(waterelev)~1, mydata)
#This line turns the log(data) back to the original data:
kriging_result$krige_output$var1.pred<-exp(kriging_result$krige_output$var1.pred)
library(reshape2)
ggplot_data = as.data.frame(kriging_result$krige_output)
ggplot(ggplot_data, aes(x = x, y = y, fill = var1.pred)) + 
   geom_raster() + coord_fixed() + 
   scale_fill_gradient(low = 'white', high = muted('blue'))

错误:

错误:美学长度必须为 1,或与 dataProblems:x,y 长度相同

【问题讨论】:

    标签: r label automap


    【解决方案1】:

    automapPlot 函数是spplot 的包装,因此适用于spplot 的任何修复也适用于automapPlot。您可以从 spplot 文档开始。

    但是,我通常使用ggplot2 包进行任何绘图工作,包括空间数据。下面是一个重现automapPlot结果的例子:

    library(ggplot2)
    theme_set(theme_bw())
    library(scales)
    library(automap)
    data(meuse)
    coordinates(meuse) =~ x+y
    data(meuse.grid)
    gridded(meuse.grid) =~ x+y
    kriging_result = autoKrige(zinc~1, meuse, meuse.grid)
    
    # Cast the Spatial object to a data.frame
    library(reshape2)
    ggplot_data = as.data.frame(kriging_result$krige_output)
    
    ggplot(ggplot_data, aes(x = x, y = y, fill = var1.pred)) + 
        geom_raster() + coord_fixed() + 
        scale_fill_gradient(low = 'white', high = muted('blue'))
    

    【讨论】:

    • 非常感谢您的回答。但是,当我将这些行应用于我的数据时,它会显示:“错误:美学的长度必须为 1,或者与 dataProblems:x,y 的长度相同”我应该怎么做才能解决这个问题?
    • 尊敬的 @PaulHiemstra 先生,我发现 geom_raster() 可能会导致此错误:“错误:美学必须是长度为 1,或者与 dataProblems:x,y 的长度相同”我应该做些什么来解决这个问题?
    • 在我提供任何反馈之前,您需要在上面的问题中添加重现您的问题的代码+数据。
    • 谢谢@PaulHiemstra 先生。我已经添加了代码,但是由于我不知道如何附加文件,所以我只是解释了我使用的数据格式。
    • 尊敬的@PaulHiemstra 先生,我刚刚学会了如何共享文件。这是链接:onedrive.live.com/… ...需要注意的是代码中文件的地址没有指定。
    【解决方案2】:

    我使用了您提供的数据集,并将结果像图片一样发布:

    我只是运行您的代码,直到 ggplot_data 从 spPointsDataFrame(网格化)转换为 data.frame(使用 reshape2)。 然后我一步一步构建了ggplot对象,但没有发现错误:

    g=ggplot(data=ggplot_data,aes(x=x1,y=x2,fill=var1.pred))
    g=g+geom_raster()
    g=g+coord_fixed()
    g=g+scale_fill_gradient(low = 'white', high = muted('blue'))
    print(g)
    

    这是你所期望的吗?

    【讨论】:

    • 非常感谢@Fabio。它有效,但我有 5 个问题: 1. 由于我生成了 2 个 kriging_results(使用和不使用网格),我不知道这段代码绘制的是哪一个(我想同时映射它们) 2. x 和 y轴标签不能用 xlab 和 ylab 更改为 x,y。 3. 我无法使用通用、简单和块克里金法进行插值,我拥有的数据是否可行?如何?第4个问题在下一条评论!!
    • 4.我需要绘制两个 kriging_results 的标准误差,但我不知道如何以及如何使用 x 和 y 标签和刻度线 5 绘制它们。我不知道如何评估 IDW 插值以及如何绘制 SE或者......它,或者如何比较IDW和克里金。请原谅我,我是 R 新手,我附上的代码是我写的第一个代码。您能否将所需的代码添加到我的并将链接发送给我,或者写在这里?非常感谢您的帮助。再次抱歉。
    • 哦,我刚刚意识到你的意思是上面的代码,而不是我分享它的链接的那个。因此,问题 1 和 2 为我解决了。对不起!!
    • 而且,我意识到的最后一件事是它显示的渐变没有获得不同色调所需的对比度。当我们绘制(kriging_result)时,它会更好地显示水平。有没有办法在渐变中添加更多颜色??
    • 确定是:使用 scale_colour_gradientn(colours = rainbow(7), breaks = c(700,800,900,1000), labels = format(breaks))
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2021-06-14
    • 2020-11-22
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2016-03-04
    • 2019-02-08
    相关资源
    最近更新 更多