在 python 中绘制插值曲面

我有一个 4x4 矩阵 ( test4x4),我想将它插值到一个 8x8 矩阵 ( test8x8)。我用于interpolate.interp2d插值,但是当我绘制它(test8x8)时,它看起来不像是test4x4绘图。我哪里弄错了?


import numpy as np

from scipy import interpolate

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D


mymin,mymax = 0,3

X = np.linspace(mymin,mymax,4)

Y = np.linspace(mymin,mymax,4)


x,y = np.meshgrid(X,Y)


test4x4 = np.array([[ 1.2514318 ,  1.25145821,  1.25148472,  1.25151133],

   [ 1.25087456,  1.25090105,  1.25092764,  1.25095435],

   [ 1.25031581,  1.25034238,  1.25036907,  1.25039586],

   [ 1.24975557,  1.24978222,  1.24980898,  1.24983587]])


f = interpolate.interp2d(x,y,test4x4,kind='cubic')


# use linspace so your new range also goes from 0 to 3, with 8 intervals

Xnew = np.linspace(mymin,mymax,8)

Ynew = np.linspace(mymin,mymax,8)


test8x8 = f(Xnew,Ynew)


print('test8x8=',test8x8)


plot1=plt.figure(1)

plt.title('test 4X4')

fig1 = plt.figure(1)

ax1 = fig1.gca(projection='3d')

ax1.plot_surface(x.T,y.T, test4x4, alpha = 1, rstride=1, cstride=1, linewidth=0.5, antialiased=True, zorder = 0.5)

plt.xlabel('x')

plt.ylabel('y')

plt.grid()


ax1.plot_surface(Xnew.T, Ynew.T, test8x8, alpha = 1, rstride=1, cstride=1, linewidth=0.5, antialiased=True, zorder = 0.5)

plt.grid()


plt.show()

http://img2.mukewang.com/644785110001d85e06310471.jpg

我想我可以解决这个问题,我应该使用x1,y1 = np.meshgrid(Xnew,Ynew).



一只甜甜圈
浏览 107回答 1
1回答

慕斯王

对于 8x8,您还需要一个网格:...Xnew = np.linspace(mymin,mymax,8)Ynew = np.linspace(mymin,mymax,8)xx, yy = np.meshgrid(Xnew, Ynew)  #You need this并使用这个 meshgrid 来绘制ax1.plot_surface(xx.T, yy.T, test8x8, alpha=0.5, rstride=1, cstride=1, \                   linewidth=0.5, antialiased=True, zorder = 10)alpha=0.5在两者中使用plot_surface(),以便您可以看到两个表面。要更清楚地分离 2 个表面,您可以尝试第二个.plot_surface()作为ax1.plot_surface(xx.T, yy.T, 0.0001+test8x8, alpha=0.5, rstride=1, cstride=1, \                   linewidth=0.5, antialiased=True, zorder = 10)值 0.0001 使第二个表面更高(在 z 方向)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python