【问题标题】:How to achieve perspective in matplotlib 3d plot如何在 matplotlib 3d 图中实现透视
【发布时间】:2017-09-11 16:15:19
【问题描述】:

我正在 matplotlib 中绘制 3d 线和点。 在输出上,总是在顶部绘制最后一个数据,而不是 3d 投影中的“更接近”的数据。 我想实现一个考虑视角的视图。

这是一个最小的代码,在这种情况下,红线总是在蓝线的顶部:

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize = [8, 14])
ax1 = fig.add_subplot(211, projection='3d')
ax2 = fig.add_subplot(212, projection='3d')

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)

ax1.plot(x, y, 0, 'b', lw = 3)
ax1.plot(x, y, 1, 'r', lw = 3)

ax2.plot(x, y, 0, 'b', lw = 3)
ax2.plot(x, y, 1, 'r', lw = 3)

ax1.view_init(90, 0)
ax2.view_init(-90, 0)

plt.show()

【问题讨论】:

  • 您可以尝试将zorder 添加到每一行,例如zorder=0 用于第一个情节,zorder=1 用于第二个情节。
  • @MartinEvans,该实验相当于更改线条的绘制顺序。我们得到相反的结果,而不是总是在蓝色之上红色。这个想法是视图考虑了线条与观察者的接近程度。
  • 这正是我遇到@ImportanceOfBeingErnest 的问题。那么,除了使用其他绘图工具之外,没有其他可用的解决方案吗?
  • 好吧,正如常见问题解答所说,您可以查看 mayavi。请注意,关于软件推荐的问题在这里是题外话,但您当然可以尝试您找到的任何 python 3D 库,如果失败,请在此处发布特定问题。

标签: python matplotlib plot 3d


【解决方案1】:

从 matplotlib 2.1.0 开始,您可以通过调用 ax.set_proj_type('ortho') 将投影类型设置为正交。所以对于你的例子:

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure(figsize = [8, 14])
ax1 = fig.add_subplot(211, projection='3d')
ax2 = fig.add_subplot(212, projection='3d')

ax1.set_proj_type('ortho')
ax2.set_proj_type('ortho')

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)

ax1.plot(x, y, 0, 'b', lw = 3)
ax1.plot(x, y, 1, 'r', lw = 3)

ax2.plot(x, y, 0, 'b', lw = 3)
ax2.plot(x, y, 1, 'r', lw = 3)

ax1.view_init(90, 0)
ax2.view_init(-90, 0)

plt.show()

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2012-07-28
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多