【问题标题】:plot interpolated surface in python在python中绘制插值曲面
【发布时间】:2020-08-03 22:20:42
【问题描述】:

我有一个 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()

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

【问题讨论】:

    标签: python matplotlib interpolation mplot3d


    【解决方案1】:

    对于 8x8,您还需要一个网格:

    ...
    Xnew = np.linspace(mymin,mymax,8)
    Ynew = np.linspace(mymin,mymax,8)
    xx, yy = np.meshgrid(Xnew, Ynew)  #You need this
    

    并使用这个网格来绘制

    ax1.plot_surface(xx.T, yy.T, test8x8, alpha=0.5, rstride=1, cstride=1, \
                       linewidth=0.5, antialiased=True, zorder = 10)
    

    在两个plot_surface() 中使用alpha=0.5,这样您就可以看到两个表面。

    要更清楚地分离两个表面,您可以尝试第二个.plot_surface() as

    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 方向上)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      相关资源
      最近更新 更多