Python画三维图-----插值平滑数据
一、二维的插值方法:
- 原始数据(x,y)
- 先对横坐标x进行扩充数据量,采用linspace。【如下面例子,由7个值扩充到300个】
- 采用scipy.interpolate中的spline来对纵坐标数据y进行插值【也由7个扩充到300个】。
- 画图
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 = [0.1,0.2,……,0.9] (shape = (9))
z = 【81个数据】(shape = (81))
生成数据:
x = np.linspace(0.1,0.9,9)
y = np.linspace(0.1,0.9,9)
z = np.random.rand(81)
2、将x和y进行扩充到想要的大小:
【两种方法:np.arange和np.linspace】
xnew = np.arange(0.1, 1, 0.03) 【shape=(31)】
ynew = np.arange(0.1, 1, 0.03) 【shape=(31)】
或者
xnew = np.linspace(0.1, 0.9, 31)
ynew = np.linspace(0.1, 0.9, 31)
3、对z进行插值:
采用 scipy.interpolate.interp2d函数进行插值。
x,y原数据:【x.shape=9,y.shape=9,z.shape=81】
f = interpolate.interp2d(x, y, z, kind='cubic')
x,y扩充数据:【xnew.shape=31,y.shape=31】
znew = f(xnew, ynew) 【得到的znew.shape = (31,31)】
znew为插值后的z
4、画图:
采用 from mpl_toolkits.mplot3d import Axes3D进行画三维图
Axes3D简单用法:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
比如采用plot_trisurf画三维图:plot_trisurf(x,y,z)
【plot_trisurf对数据要求是:x.shape = y.shape = z.shape,所以x和y的shape需要修改,采用np.meshgrid,且都为一维数据】
#修改x,y,z输入画图函数前的shape
xx1, yy1 = np.meshgrid(xnew, ynew) newshape = (xx1.shape[0])*(xx1.shape[0])
y_input = xx1.reshape(newshape)
x_input = yy1.reshape(newshape)
z_input = znew.reshape(newshape)
5、所有代码:
# 载入模块
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import pandas as pd
import seaborn as sns
from scipy import interpolate #生成数据
x = np.linspace(0.1,0.9,9)
y = np.linspace(0.1,0.9,9)
z = np.random.rand(81) #插值
# xx, yy = np.meshgrid(x, y) f = interpolate.interp2d(x, y, z, kind='cubic')
xnew = np.arange(0.1, 1, 0.03)
ynew = np.arange(0.1, 1, 0.03)
znew = f(xnew, ynew) #修改x,y,z输入画图函数前的shape
xx1, yy1 = np.meshgrid(xnew, ynew)
newshape = (xx1.shape[0])*(xx1.shape[0])
y_input = xx1.reshape(newshape)
x_input = yy1.reshape(newshape)
z_input = znew.reshape(newshape) #画图
sns.set(style='white')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x_input,y_input,z_input,cmap=cm.coolwarm)
plt.show()
Python画三维图-----插值平滑数据的更多相关文章
- PYTHON画三维图
import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np #bbb=[1 if ...
- CAD画三维图怎么渲染?一分钟教你快速操作
从事过CAD相关工作的都知道,CAD绘制的方式有二维平面图以及三维图形,三维图形,画三维图方式也是比较简单的.那当然三维图画完后一般还需要进行渲染操作,步骤也是比较简洁的.下面就来给大家操作一下CAD ...
- python绘制三维图
作者:桂. 时间:2017-04-27 23:24:55 链接:http://www.cnblogs.com/xingshansi/p/6777945.html 本文仅仅梳理最基本的绘图方法. 一. ...
- python读取三维点云球坐标数据并动态生成三维图像与着色
关键步骤: 1.首先通过读取.txt文本数据并进行一系列字符串处理,提取显示所需要的相关数据矩阵 2.然后利用python的matplotlib库来进行动态三维显示 备注:matplotlib在显示2 ...
- matlab 画三维图函数
matlab三维绘图 http://blog.sina.com.cn/s/blog_6d5ffd0d0100lyah.html Matlab绘图系列之高级绘图 http://blog.163.com/ ...
- matplotlib---插值画二维、三维图
一.画二维图 1.原始数据(x,y) import matplotlib.pyplot as plt import numpy as np #数据 X = np.array(list(i for i ...
- 用Python的Plotly画出炫酷的数据可视化(含各类图介绍,附代码)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我被狗咬了 在谈及数据可视化的时候,我们通常都会使用到matplo ...
- Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?
Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢? 可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的.对于初学者来说,很容易被这官网上 ...
- 结合MATLAB、Python、R语言,在求得显著差异的边(节点对)之后,怎么画circle图
先来看看成果图: OK,开始画图: 实验背景声明:在脑影像分析中,我们首先构建脑网络,然 ...
随机推荐
- iOS:去除UITableView的空白行
要去除UITableView在运行时显示的多余空白行,只需要将TableView的Style从Plain改为Grouped即可.
- HDOJ 5417 Victor and Machine 水
Victor and Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Othe ...
- 基于QT的多线程server
// thread.cpp #include "thread.h" Thread::Thread(int socketDescriptor, QObject *parent) : ...
- C语言之基本算法40—字符串删除元音字母倒序输出
//字符串,数组 /* ================================================================== 题目: 输入一行字符,将辅音字母按反序输出 ...
- .m文件导入C++头文件带来的错误
这几天的工作挖了不少的坑.遇到了各种千奇百怪的错误,如今好好总结一下. 新建一个project,然后新建HelloCPP.h,HelloCPP.cpp文件.HelloCPP.h文件内容例如以下: #i ...
- Extjs TabPanel页签转换事件
listeners : { tabchange : function(tp, p) { var allmapDIV = document.getElementById("allmap&quo ...
- 最简单的C# Windows服务程序
通过这个示例了解如何通过C#如何创建一个Windows服务程序. 工具/原料 Vistual Studio 2015 c# 方法/步骤 打开vs2015 文件->新建项目->V ...
- 【NOIP2018】 游记
All ended? [day 0] 一点感觉没有,不过翘掉了早上的课(当然还有前三周的课),然后刚想睡一会儿,就被通知要上车了/难受 在车上玩了一会儿早上下的Super Mario(主要是早上刷了一 ...
- BZOJ 2969 期望
思路: 我们可以分开算每个格子自己的期望啊... 期望可以累加的 那就把这个大格子 分成 9个部分 分别算好了... //By SiriusRen #include <cmath> #in ...
- 跳出双重for循环的案例__________跳出了,则不再执行标签ok下的for循环代码
ok: for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { System.out.print("*" ...