从X、Y、Z点列表绘制R曲面图
我正在尝试为一个很长的x,y,z点列表中的数据绘制曲面图。为了做到这一点,我将数据划分成一个由10k个正方形组成的网格,并在每个正方形中找到z的最大值。根据我的理解,每个z值都应该存储在一个矩阵中,其中矩阵的每个元素对应于网格上的一个正方形。有没有比下面的代码更简单的方法?最后一行已经很长了,只有一个正方形从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<-(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行的链接: