Python 具有不同数组大小的 3D 图
Python 3D plot with different array sizes
我已经使用 Matlab 几年了,它非常简单(在我看来)并且在涉及 surf
、contour
或 [=14= 等 3D 图时非常强大].
在 Python.
中做同样的事情对我来说至少更不直观
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0,100,0.1) # time domain
sp = np.arange(0,50,0.2) # spatial domain
c = 0.5
u0 = np.exp(-(sp-5)**2)
u = np.empty((len(t),len(sp))
for i in range(0,len(t)):
u[i][:] = u0*(sp-c*t)
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.plot_surface(t,sp,u)
plt.show()
所以,在 Matlab 中,我认为这很容易。
我需要做什么才能得到一个 3D 图(表面或其他),其中包含两个不同大小的 x 和 y 维度数组以及一个为每个网格点赋值的 z 矩阵?
因为这是一个基本问题,请随意解释更多或给我一个 link 和答案。不幸的是,到目前为止,我并不真正理解我阅读的有关此问题的代码中发生了什么。
我认为你写的东西在 matlab 中也行不通(我可能是错的,我已经有一段时间没用过了)。
要执行 plot_surface(X, Y, Z)
,X, Y, Z
必须是大小相等的二维数组。所以,就像你在 matlab 中做的那样:
T, SP = numpy.meshgrid(t, sp)
plot_surface(T, SP, u)
我已经使用 Matlab 几年了,它非常简单(在我看来)并且在涉及 surf
、contour
或 [=14= 等 3D 图时非常强大].
在 Python.
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0,100,0.1) # time domain
sp = np.arange(0,50,0.2) # spatial domain
c = 0.5
u0 = np.exp(-(sp-5)**2)
u = np.empty((len(t),len(sp))
for i in range(0,len(t)):
u[i][:] = u0*(sp-c*t)
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.plot_surface(t,sp,u)
plt.show()
所以,在 Matlab 中,我认为这很容易。 我需要做什么才能得到一个 3D 图(表面或其他),其中包含两个不同大小的 x 和 y 维度数组以及一个为每个网格点赋值的 z 矩阵?
因为这是一个基本问题,请随意解释更多或给我一个 link 和答案。不幸的是,到目前为止,我并不真正理解我阅读的有关此问题的代码中发生了什么。
我认为你写的东西在 matlab 中也行不通(我可能是错的,我已经有一段时间没用过了)。
要执行 plot_surface(X, Y, Z)
,X, Y, Z
必须是大小相等的二维数组。所以,就像你在 matlab 中做的那样:
T, SP = numpy.meshgrid(t, sp)
plot_surface(T, SP, u)