我认为主要问题在于每个点都有4个信息,因此你实际上对一个四维物体感兴趣。绘制这个图形总是很困难(甚至可能是不可能的)。我建议采用以下解决方案之一:
您将问题改为:我只对中的z = f(x,y)
感兴趣,而不是所有组合。
您略微调整绘图精度,表示您不需要100个z级别,而只需要5个,然后您可以简单地制作5个已有的图形。
如果您想使用第一种方法,则有几种子方法:
A. 绘制二维曲面f(x,y)=z
并使用T
进行着色
B. 使用任何用于绘制复杂函数的技术,有关更多信息,请参见此处。
使用方法1.A(我认为是最佳解决方案)绘制出
z=x^2+y^2
的图形如下:
![enter image description here](https://istack.dev59.com/Bm4K4.webp)
我使用了这个程序:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
X, Y = np.mgrid[-10:10:100j, -10:10:100j]
Z = (X**2+Y**2)/10
T = np.sin(X*Y*Z)
norm = mpl.colors.Normalize(vmin=np.amin(T), vmax=np.amax(T))
T = mpl.cm.hot(T)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, facecolors=T, linewidth=0,
cstride = 1, rstride = 1)
plt.show()
第二种方法会得到类似于以下内容:
![输入图像描述这里](https://istack.dev59.com/SVmOi.webp)
代码如下:
norm = mpl.colors.Normalize(vmin=-1, vmax=1)
X, Y= np.mgrid[-10:10:101j, -10:10:101j]
fig = plt.figure()
ax = fig.gca(projection='3d')
for i in np.linspace(-1,1,5):
Z = np.zeros(X.shape)+i
T = np.sin(X*Y*Z)
T = mpl.cm.hot(T)
ax.plot_surface(X, Y, Z, facecolors=T, linewidth=0, alpha = 0.5, cstride
= 10, rstride = 10)
plt.show()
注意:我将函数更改为
T = sin(X * Y * Z)
,因为除以
X * Y * Z
会使函数的行为变得糟糕,因为您将两个非常接近于0的数字相除。