我知道我可以使用以下代码在matplotlib中进行4D绘图,第四个维度显示为colormap:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.add_subplot(111,projection= '3d' )
x = np.arange(100)/ 101
y = np.sin(x) + np.cos(x)
X,Y = np.meshgrid(x,y)
Z = (X**2) / (Y**2)
A = np.sin(Z)
ax.plot_surface(X,Y, Z, facecolors=cm.Oranges(A))
plt.show()
但是,如果我的数据不是其他数据的函数怎么办?没有np.meshgrid我该怎么做? (换句话说,我的Z系列不能是X,Y输出的函数,它是np.meshgrid(x,y)的输出,因为Z不是X和Y的函数。)
答案 0 :(得分:1)
曲面图是2D点到1D值的映射,即对于每对(x,y)
坐标,您只需要一个z
坐标。因此,虽然Z
不是X
和Y
的函数并非绝对必要,但要绘制的数组需要具有相同数量的元素。
对于plot_surface
,限制是将X
和Y
作为网格化2D数据。 Z
不必是2D,但需要具有相同数量的元素。
使用plot_trisurf
可以削弱此要求,其中唯一的要求是存在x,y,z的严格映射,即i
和X
中的Y
值{1}}对应于Z中的i
值。
在任何情况下,即使没有将X
和Y
映射到Z
的分析函数,Z
仍然需要某种映射。否则,甚至可能产生的情节会传达什么信息。