【问题标题】:Plotting 3-D surfaces and lines with perspective用透视图绘制 3-D 曲面和线
【发布时间】:2020-03-22 06:19:39
【问题描述】:

我正在尝试通过 3-D 表面绘制一条线作为指示轴的方法。但是,这只会导致线条完全绘制在表面之上或之下——更改zorder 并不能解决这个问题。

我正在寻找的是让线条看起来好像穿过表面

我的代码和输出如下:

fig = plt.figure(figsize=(9,9))
ax = plt.axes(projection='3d')

ax.plot_surface(X,Z,Y,
                linewidth=0,
                cmap=cm.jet,
                facecolors=cm.jet(r_3d/max(abs(r_3d.flatten()))),
                edgecolor='none',
                shade=False,
                antialiased=False)

ax.plot([0,0],[-0.3,0.3],[0,0],linewidth=2,c='k')

在表面上绘制的线示例

我想要的输出的手绘示例

【问题讨论】:

  • @JohanC 谢谢!我认为 MayaVi 正是我在这里所需要的
  • 如果您将输入的 X、Y、Z 添加到表面,这将有助于我们重新创建输出。

标签: python matplotlib plot 3d


【解决方案1】:

我认为您可以使用zorder(例如here)解决这个问题,尽管我没有专门尝试使用 3d 绘图。 zorder 更改绘图顺序,或者本质上是特定项目的绘图深度。大的 z 顺序绘制在顶部,小的绘制在后面,因此,如果您将 3d 项目的 z 顺序设为 1,将线设为 z 顺序为零,这应该可以工作。

【讨论】:

  • 更改zorder 基本上是一个全有或全无的开关——在更改zorder 时,这条线完全绘制在表面的前面或后面
  • zorder 的想法是分割你的表面:在后面画完整的表面,然后画线,然后画离观察者最近的一半表面。但我认为plot_surface 对绘制半曲面不是很满意。
  • 您也可以只绘制一个完整的 3d 曲面和两条线。
猜你喜欢
  • 2023-02-15
  • 2019-11-20
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多