我尝试使用plot.variogram
功能将文本,线条,次刻度标记和/或个性化轴添加到变异函数中。当我尝试使用传统函数调用(即text("Text Here")
)添加其中任何一个时,即使变量图的绘图窗口打开,它也会返回plot.new has not been called yet
的错误。
这是我的代码:
#v is sample variogram, vmf is fitted model
plot(v, model=vmf, xlim=c(0, 65), ylim=c(0,25), xlab="Distance between Point Pairs (km)",
ylab="Semivariance ((C/km) )", cex.xlab=6.5, cex.ylab=6.5, cex.xaxis=2.5, cex.main=5.5)
#Add a 2 to the y label that is in 10 pt. font so it looks like it is (C/km)^2
par(ps=10, cex=1, cex.main=1)
text(-2, 16, labels=2, srt=90)
#Add lines showing the desired point pair distance and semivariance for the problem
par(new=TRUE, lines(c(53,53),c(0,15),col='red'))
par(new=TRUE, lines(c(0, 53),c(15,15),col='red'))
#Add axis minor tick marks in increments of 5
axis(side=1, at=c(0, 5, 15, 25, 35, 45, 55, 65), labels = NA, tck=-0.01, pos=0)
axis(side=2, at=c(0, 2.5, 7.5, 12.5, 17.5, 22.5, 25),labels = NA, tck=-0.01, pos=0)
我试图"欺骗" R致电:
plot(c(0,65), c(0,25))
然后运行上面的代码。这允许传统的功能工作,但遗憾的是它们不在适当的位置(即x = 5不在x轴上的5处)。
任何有关更好方法的建议"技巧" R正确绘图?任何自动向变异函数图添加文本,轴等的函数?
如果您有任何其他想知道的事,请告诉我。
谢谢!
答案 0 :(得分:3)
Richard Scriven的回答在使用geoR
包时效果很好。
如果使用gstat
包,则需要使用trellis图形命令(lattice
包和latticeExtra
包)修改这些图。 plot.new has not been called yet
错误的原因是因为在网格图形上使用基本图形。
情节修改示例:
使用list
创建绘图以修改所有输入参数。 scales
修改了x和y轴,您可以在没有at
的情况下添加刻度线(labels
)(参见y轴列表)。 key
添加了图例。
p1 = plot(v.GF, model=vmf.GF, lwd=2, col.line="black", pch=16, cex=1.5, ylim=c(0,25), xlim=c(0,150),
main=list("Gaussian Semivariogram Model for Geothermal Gradient", cex=2),
xlab=list("Distance between Point Pairs (km)", cex=2),
ylab=list(expression("Geothermal Gradient Semivariance (°C/km)"^2), cex=2),
scales=list(x=list(at=c(0,25,50,75,100,125,150), labels=c(0,25,50,75,100,125,150)), y=list(at=c(0,2.5,5,7.5,10,12.5,15,17.5,20,22.5,25), labels=c(0,"",5,"",10,"",15,"",20,"",25)), cex=2),
key=list(text=list(lab=c("Gaussian Model","Sill","Maximum Interpolation Distance")), space="top", lines=list(col=c("black","black","red"), lwd=2, lty=c(1,2,1)), columns=3, cex=1.5))
然后使用trellis.focus
绘制和修改绘图区域,使用llines
添加线条和ltext
添加文字:
trellis.focus("panel",1,1)
plot(p1)
trellis.focus("panel",1,1)
llines(x=c(50,50), y=c(0,14.5), col="red", lwd=2, lty=1)
llines(x=c(0,50), y=c(14.5,14.5), col="red", lwd=2, lty=1)
llines(x=c(0,150), y=c(vmf.GF$psill[2]+vmf.GF$psill[1],vmf.GF$psill[2]+vmf.GF$psill[1]), col="black", lty=2, lwd=2)
ltext(x=12,y=5,"Nugget ~6.0", cex=1.5)
trellis.unfocus()
以下是结果图:
答案 1 :(得分:1)
我不确定你是如何得到你的变异函数的,但是使用了this link中的一些代码和信息,我得到了一些可以帮助你的东西。
使用geoR
包,功能variog
,您可以像往常一样操纵plot
。
> sampleV <-
read.table(header = TRUE, text = "Station Av8top Lat Lon
1 60 7.225806 34.13583 -117.9236
2 69 5.899194 34.17611 -118.3153
3 72 4.052885 33.82361 -118.1875
4 74 7.181452 34.19944 -118.5347
5 75 6.076613 34.06694 -117.7514
6 84 3.157258 33.92917 -118.2097
7 85 5.201613 34.01500 -118.0597
8 87 4.717742 34.06722 -118.2264
9 88 6.532258 34.08333 -118.1069
10 89 7.540323 34.38750 -118.5347", row.names = 1)
> library(geoR)
> sampleVMF <- variog(coords = sampleV[,3:4], data = sampleV[,2],
breaks = seq(0, 1.5, length = 11))
> plot(sampleVMF, axes = FALSE,
xlab="Distance between Point Pairs (km)",
ylab="Semivariance ((C/km) )")
> axis(1, at = sampleVMF$u)
> axis(2, at = sampleVMF$v)
> box()
> text(median(sampleVMF$u), median(sampleVMF$v), "Hello world!")
> lines(sampleVMF$u, sampleVMF$v)