我认为主要问题是,每个点都有 4 个信息,所以你实际上对 4 维对象感兴趣。绘制这个图总是很困难(甚至可能是不可能的)。我建议采用以下解决方案之一:
您将问题更改为:我对 x,y,z 的所有组合不感兴趣,而只对其中的组合感兴趣z = f(x,y)
你稍微改变一下绘图的准确性,说你不需要 100 个 z 级别,而可能只需要 5 个,然后你只需制作 5 个已有的绘图即可。
如果你想使用第一种方法,那么有几个子方法:
A. 绘制 2 维曲面f(x,y)=z
并用它着色T
B. 使用任何用于绘制复杂函数的技术,有关详细信息,请参阅here https://www.pacifict.com/ComplexFunctions.html.
The plot given by method 1.A (which I think is the best solution) with z=x^2+y^2
yields:
我使用了这个程序:
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 #definition of f
T = np.sin(X*Y*Z)
norm = mpl.colors.Normalize(vmin=np.amin(T), vmax=np.amax(T))
T = mpl.cm.hot(T) #change T to colors
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()
第二种方法给出类似:
用代码:
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 的数字相除时,函数的行为会变得很糟糕。