我有一个trans3d
模型的透视图,我希望添加两个东西
首先,我尝试使用library(locfit)
X <- as.matrix(loc1[,1:2])
Y <- as.matrix(loc1[,3])
zz <- locfit(Y~X,kern="bisq")
pmat <- plot(zz,type="persp",zlab="Amount",xlab="",ylab="",main="Plains",
phi = 30, theta = 30, ticktype="detailed")
x1 <- as.vector(X[,1])
x2 <- as.vector(X[,2])
Y <- as.vector(Y)
points(trans3d(x1,x2,Y,pmat))
功能。但即使我的变量采用矢量格式,我也会收到以下错误:
cbind(x,y,z,1)中的错误%*%pmat:需要数字/复杂矩阵/矢量参数
以下是我的代码片段
function foo() {
var a = 2;
function bar() {
console.log( a );
}
return bar;
}
function test() {
var bz = foo();
bz();
}
// prints 2. Here function bar referred by var bz is outside
// its lexical scope but it can still access it
test();
我的&#34; loc1&#34;数据可在此处找到 - https://www.dropbox.com/s/0kdpd5hxsywnvu2/loc1_amountfreq.txt?dl=0
答案 0 :(得分:1)
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
(不是很难,虽然只是狡猾)。
您可以将其放入一个函数中,以便重用它。 我们:
这样:
# 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))
注意 - 看起来不太漂亮!可能想要调整说你的颜色比例颜色,或者facet的透明度等。Re:添加图例,有一些other questions处理它。
(PS:耻辱ggplot不做3D散点图。)