Python画三维图-----插值平滑数据

本文介绍了如何使用Python进行二维和三维插值,特别是在三维平滑图的绘制中。通过scipy.interpolate库的interp2d函数进行数据插值,然后利用mpl_toolkits.mplot3d的Axes3D模块画出三维平滑图。示例中详细展示了数据扩充、插值计算和画图的步骤。
摘要由CSDN通过智能技术生成

一、二维的插值方法:

  1. 原始数据(x,y)
  2. 先对横坐标x进行扩充数据量,采用linspace。【如下面例子,由7个值扩充到300个】
  3. 采用scipy.interpolate中的spline来对纵坐标数据y进行插值【也由7个扩充到300个】。
  4. 画图
import matplotlib.pyplot as plt
import numpy as np
#数据 T
= np.array([6, 7, 8, 9, 10, 11, 12]) power = np.array([1.53E+03, 5.92E+02, 2.04E+02, 7.24E+01, 2.72E+01, 1.10E+01, 4.70E+00])
#插值
from scipy.interpolate import spline xnew = np.linspace(T.min(),T.max(),300) #300 represents number of points to make between T.min and T.max power_smooth = spline(T,power,xnew) print(xnew.shape) #(300,) print(power_smooth.shape) #(300,)
#画图 plt.plot(xnew,power_smooth) plt.show()

 二、三维平滑图---插值:

1、数据:

x = [0.1,0.2,……,0.9]   (shape = (9))

y =

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函数绘制了这个曲面。需要注意的是,这里绘制的拟合曲面并不完全是原始散点数据的一个真实的“表面”,而仅仅是一个在散点数据周围的平滑曲面。不过,对于数据的可视化而言,这种方法已经足够了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值