TL,DR:沒有真正plot.locfit
,但你可以重建它。
我不認爲plot.locfit
有很好的支持這種定製。假設get.data=T
在您的plot
調用中將繪製原始數據點(點1),並且似乎確實如此,如果type="persp"
爲。所以沒有運氣。或者,您可以像points(trans3d(...))
那樣完成,除非您需要由persp
返回的透視矩陣,並且plot.locfit.3d
不會返回它。所以再次,沒有運氣。
對於着色,通常您會製作一個色階(http://r.789695.n4.nabble.com/colour-by-z-value-persp-in-raster-package-td4428254.html)併爲每個z構面指定與之相關的顏色。但是,您需要此表面的Z值(而不是原始數據的Z值),並且plot.locfit
也不會返回此值。
所以要做你想做的事情,你本質上應該自己記錄plot.locfit
(不難,雖然只是cludgy)。
你可以把它放到一個函數中,以便重用它。 我們:
- 使XY點的均勻格柵
- 在每個點
- 使用這些繪製表面(具有色標)計算擬合的值,保存該立體矩陣,使得我們可以
- 情節的原始數據
這樣:
# make a grid of x and y coords, calculate the fit at those points
n.x <- 20 # number of x points in the x-y grid
n.y <- 30 # number of y points in the x-y grid
zz <- locfit(Total ~ Mex_Freq + Cal_Freq, data=loc1, kern="bisq")
xs <- with(loc1, seq(min(Mex_Freq), max(Mex_Freq), length.out=20))
ys <- with(loc1, seq(min(Cal_Freq), max(Cal_Freq), length.out=30))
xys <- expand.grid(Mex_Freq=xs, Cal_Freq=ys)
zs <- matrix(predict(zz, xys), nrow=length(xs))
# generate a colour scale
n.cols <- 100 # number of colours
palette <- colorRampPalette(c('blue', 'green'))(n.cols) # from blue to green
# palette <- colorRampPalette(c(rgb(0,0,1,.8), rgb(0,1,0,.8)), alpha=T)(n.cols) # if you want transparency for example
# work out which colour each z-value should be in by splitting it
# up into n.cols bins
facetcol <- cut(zs, n.cols)
# draw surface, with colours (col=...)
pmat <- persp(x=xs, y=ys, zs, theta=30, phi=30, ticktype='detailed', main="plains", xlab="", ylab="", zlab="Amount", col=palette[facetcol])
# draw your original data
with(loc1, points(trans3d(Mex_Freq,Cal_Freq,Total,pmat), pch=20))
注 - 看起來不漂亮!可能會想要調整說你的顏色比例顏色,或方面的透明度等。Re:添加圖例,有一些other questions處理。
(PS:真可惜ggplot沒有做3D散點圖。)
什麼是 「LOC1」 對象?另外,請添加您使用的額外包裹。 – 2015-07-13 03:22:53
@Pascal我已經添加了鏈接到我的數據以及我使用的額外軟件包 – dustbunny
當您說「預測變量作爲3D空間中的點」時,您的意思是您還希望繪製原始數據(每個點都有一個點) ? –