R从X,Y,Z点列表中的曲面图

时间:2014-12-15 17:15:24

标签: r plot

我正在尝试为非常长的x,y,z点列表中的数据制作表面图。为此,我将数据划分为10k格的网格,并在每个方格内找到z的最大值。根据我的理解,每个z值应存储在矩阵中,矩阵的每个元素对应于网格上的正方形。有没有比下面的代码更容易的方法呢?最后一行已经很长了,只有一个方格。

x<-(sequence(101)-1)*max(eff$CFaR)/100
y<-(sequence(101)-1)*max(eff$EaR)/100
effmap<-matrix(ncol=length(x)-1, nrow=length(y)-1)
someMatrix <- max(eff$Cost[which(eff$EaR[which(eff$CFaR >= x[50] & eff$CFaR <x[51], arr.ind=TRUE)]>=y[20] & eff$EaR[which(eff$CFaR >= x[50] & eff$CFaR <x[51], arr.ind=TRUE)]< y[91])])

1 个答案:

答案 0 :(得分:1)

所以这是我对你要完成的事情的解释......

df   <- read.csv("effSample.csv")            # downloaded from your link
df   <- df[c("CFaR","EaR","Cost")]           # remove unnecessary columns
df$x <- cut(df$CFaR,breaks=100,labels=FALSE) # establish bins: CFaR
df$y <- cut(df$EaR,breaks=100,labels=FALSE)  # establish bins: EaR

df.max <- expand.grid(x=1:100,y=1:100)       # template; 10,000 grid cells
# maximum cost in each grid cell - NOTE: most of the cells are *empty*
df.max <- merge(df.max,aggregate(Cost~x+y,df,max),all.x=TRUE)
z <- matrix(df.max$Cost,nr=100,nc=100)       # Cost vector -> matrix
# colors based on z-value
palette <- rev(rainbow(20))                  # palette of 20 colors
zlim    <- range(z[!is.na(z)])
colors  <- palette[19*(z-zlim[1])/diff(zlim) + 1] 
# create the plot
library(rgl)
open3d(scale=c(1,1,10))  # CFaR and EaR range ~ 10 X Cost range
x.values <- min(df$CFaR)+(0:99)*diff(range(df$CFaR))/100
y.values <- min(df$EaR)+(0:99)*diff(range(df$EaR))/100
surface3d(x.values,y.values,z,col=colors)
axes3d()
title3d(xlab="CFaR",ylab="EaR",zlab="Cost")

上面的代码生成一个可旋转的3D绘图,因此图像只是一个屏幕截图。注意有很多“漏洞”。这是(部分)因为您只提供了部分数据。然而,重要的是要意识到仅仅因为你想象10,000个网格单元(例如,100×100网格),并不意味着每个单元中都会有数据。