Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从X、Y、Z点列表绘制R曲面图_R_Plot - Fatal编程技术网

从X、Y、Z点列表绘制R曲面图

从X、Y、Z点列表绘制R曲面图,r,plot,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<-m

我正在尝试为一个很长的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])])

x这是我对你想要实现的目标的解释

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")

是的,有一个更简单的方法。提供您的数据的代表性样本(
eff
)-例如,足够大以便产生工作结果,或者上传所有样本并提供链接。以下是指向eff的前10k行的链接: