R语言 绘制三维散点图的预测曲面

library(rgl)
#预测脚本
predictgrid<-function(model,xvar,yvar,zvar,res=16,type=NULL){
  xrange<-range(model$model[[xvar]])
  yrange<-range(model$model[[yvar]])
  newdata<-expand.grid(x=seq(xrange[1],xrange[2],length.out=res),
                       y=seq(yrange[1],yrange[2],length.out=res))
  names(newdata)<-c(xvar,yvar)
  newdata[[zvar]]<-predict(model,newdata=newdata,type=type)
  newdata
}
#x,y,z转为列表
df2mat<-function(p,xvar=NULL,yvar=NULL,zvar=NULL){
  if(is.null(xvar)) xvar<-names(p)[1]
  if(is.null(yvar)) yvar<-names(p)[2]
  if(is.null(zvar)) zvar<-names(p)[3]
  x<-unique(p[[xvar]])
  y<-unique(p[[yvar]])
  z<-matrix(p[[zvar]],nrow=length(y),ncol=length(x))
  m<-list(x,y,z)
  names(m)<-c(xvar,yvar,zvar)
  m
}
#交错出现两个向量元素
interleave<-function(v1,v2) as.vector(rbind(v1,v2))

m<-mtcars
mod<-lm(mpg~wt+disp+wt:disp,data=m)
m$pred_
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中常用的用于绘制三维散点图的库有matplotlib和plotly等,其中matplotlib是比较常用的。假设我们已经读取了一个包含三维坐标的数据集,可以将其表示为一个3列的numpy数组,其中每一行对应着一个三维点的坐标。为了在matplotlib中绘制三维散点图,首先需要导入相应的模块: ``` import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D ``` 接着,我们可以尝试将三维绘制出来: ``` x = np.random.rand(100) y = np.random.rand(100) z = np.sin(x * y) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.show() ``` 上面的代码使用了numpy库中的rand函数生成了100个随机的三维点坐标,并使用sin函数计算出了点的Z坐标。然后通过matplotlib和mpl_toolkits模块绘制出了散点图。需要注意的是,我们使用了projection='3d'参数来告诉matplotlib我们需要绘制的是一个三维像。另外,可通过set_xlabel,set_ylabel,set_zlabel三个函数对坐标轴进行命名。 对于三维散点图的拟合曲面,可以使用scipy库中的interpolate函数进行插值处理。在我们已有的散点数据集上,我们可以利用二维的插值函数生成一个拟合曲面(也就是对原来的数据进行了一个平滑的拟合)。下面的代码展示如何使用interpolate函数生成一个拟合曲面: ``` from scipy.interpolate import griddata # 生成拟合曲面所需的网格点 xi = np.linspace(min(x), max(x), 50) yi = np.linspace(min(y), max(y), 50) X, Y = np.meshgrid(xi, yi) # 利用插值函数生成Z坐标值 Z = griddata((x, y), z, (X, Y), method='cubic') # 绘制拟合曲面 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='coolwarm') ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.show() ``` 在上面的代码中,我们使用了griddata函数对数据进行了一个二维插值,生成了一个平滑的拟合曲面,最后使用plot_surface函数绘制了这个曲面。需要注意的是,这里绘制的拟合曲面并不完全是原始散点数据的一个真实的“表面”,而仅仅是一个在散点数据周围的平滑曲面。不过,对于数据的可视化而言,这种方法已经足够了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值