用Pyplot对光滑表面图进行澄清

时间:2018-08-28 17:00:36

标签: python matplotlib

此问题基于:Smooth surface Plot with Pyplot

我正试图在我的地块上弄一个安抚的表面。我正在使用numpy.linspace定义我的x和y轴,但看来划分多少并不重要,图形到达一个不会变得更平滑的点,看起来像这样:

enter image description here

在所引用的问题中,解决方案是在新网格中使用插值函数。我不知道它是如何工作的,但是当我尝试修改它时,我得到了错误的图:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from scipy import interpolate

def func(x,y):
    return np.cos(y*x)

def short_proj():
  return np.dot(Axes3D.get_proj(ax), scale)

# Computing grid ---------------------------------------------------------
x_limits = [0,10]
y_limits = [-5,5]
xaxis = np.linspace(x_limits[0], x_limits[1], 100)
yaxis = np.linspace(y_limits[0], y_limits[1], 100)
x = xaxis[:,None]
y = yaxis[None,:]
z = func(x,y)

tck = interpolate.bisplrep(x*y,y*x,z,s=0)
znew = interpolate.bisplev(xaxis,yaxis,tck)
# ------------------------------------------------------------------------


# Plotting ---------------------------------------------------------------
fig = plt.figure()
ax = fig.gca(projection='3d')

x_scale = 1
y_scale = (y_limits[1]-y_limits[0])/(x_limits[1]-x_limits[0])
z_scale = (np.amax(z)-np.amin(z))/(x_limits[1]-x_limits[0])
scale=np.diag([x_scale, y_scale, z_scale, 1.0])
scale=scale*(1.0/scale.max())
scale[3,3]=1.0
ax.get_proj=short_proj

surf = ax.plot_surface(x, y, znew, cmap=plt.cm.jet) # to plot the original graph just change 'znew' for 'z'
plt.show()
# ------------------------------------------------------------------------

有人可以告诉我如何在该图上获得更平滑的表面吗?

0 个答案:

没有答案