我试图从海底500米乘40米部分的声纳数据绘制海底的3D图像.我正在使用带有Axes3D的matplotlib/mplot3d,我希望能够更改轴的纵横比,以便x&y轴可以缩放.生成数据而不是实际数据的示例脚本是:
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# Create figure.
fig = plt.figure()
ax = fig.gca(projection = '3d')
# Generate example data.
R, Y = np.meshgrid(np.arange(0, 500, 0.5), np.arange(0, 40, 0.5))
z = 0.1 * np.abs(np.sin(R/40) * np.sin(Y/6))
# Plot the data.
surf = ax.plot_surface(R, Y, z, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)
# Set viewpoint.
ax.azim = -160
ax.elev = 30
# Label axes.
ax.set_xlabel('Along track (m)')
ax.set_ylabel('Range (m)')
ax.set_zlabel('Height (m)')
# …Run Code Online (Sandbox Code Playgroud) 这是一个准系统的例子:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
f = fig.add_subplot(2, 1, 1, projection='3d')
t = fig.add_subplot(2, 1, 2, projection='3d')
# axes
for d in {f, t}:
d.plot([-1, 1], [0, 0], [0, 0], color='k', alpha=0.8, lw=2)
d.plot([0, 0], [-1, 1], [0, 0], color='k', alpha=0.8, lw=2)
d.plot([0, 0], [0, 0], [-1, 1], color='k', alpha=0.8, lw=2)
f.dist = t.dist = 5.2 # 10 is default
plt.tight_layout()
f.set_aspect('equal')
t.set_aspect('equal')
r = 6
f.set_xlim3d([-r, r])
f.set_ylim3d([-r, r])
f.set_zlim3d([-r, r])
t.set_xlim3d([-r, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Python 和 Matplotlib 创建 Origin 制作的瀑布图(见下图)。
一般方案对我来说很有意义,您从 2D 矩阵开始,就像您想要制作曲面图一样,然后您可以遵循StackOverflow 问题中显示的任何方法(此处)。这个想法是将矩阵的每条线绘制为 3D 空间中的一条单独的曲线。
此 matplotlib 方法会生成如下图所示的图:

我遇到的困难是,Origin 图中清晰的透视感在 matplotlib 版本中丢失了。你可以说这部分是由于相机角度造成的,但我认为更重要的是,它来自于较远的线“前面”出现的较近的线。
我的问题是,如何在 Matplotlib 中正确模仿 Origin 中的瀑布图并具有透视效果?我真的不明白这两个情节有什么不同,所以即使定义确切的问题也很困难。