Этот вопрос основан на: Гладкая поверхность с Pyplot
Я пытаюсь получить пустышку на своем участке. Я определяю свои оси x и y, используя numpy.linspace
, но кажется, что не имеет значения, сколько делений я делаю, график достигает точки, где он не станет более плавным, он выглядит так:

В указанном вопросе решение состояло в том, чтобы использовать функцию интерполяции в новой сетке. Я не понимаю, как именно это работает, но когда я попытался адаптировать его, я получил неправильный сюжет:
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()
# ------------------------------------------------------------------------
Может ли кто-нибудь подсказать мне, как получить более гладкую поверхность на этом участке?