如何使用pyplot在表面图后面绘制线

时间:2019-11-22 18:41:11

标签: python matplotlib

我想在用曲面图绘制的圆环内部绘制一条线。该线在圆环内部不应该可见-像圆环的内侧一样,只能在圆环的“末端”看到(我将圆环的一半切除)。但是,我绘制的线条随处可见(在图中可以看到)。

enter image description here

我使用了以下代码:

Action finalLamda = Expression.Lambda<Action<TInstance>>(actionExpression, instanceExpression).Compile();

我认为只需先画线 即可解决我的问题,但事实并非如此。任何建议或帮助如何更改生产线的行为都将受到赞赏。

var actionWithTryCatchExpression = WrapActionExpressionIn_Try_Catch_RethrowWithAdditionalMessage(actionExpression);
Action finalLamda = Expression.Lambda<Action<TInstance>>(actionWithTryCatchExpression, instanceExpression).Compile();

1 个答案:

答案 0 :(得分:1)

选项一-使用Mayavi

更简单的方法是使用Mayavi库。这与matplotlib非常相似,此脚本唯一有意义的区别是传递给x的{​​{1}},yz数组以绘制线应为1d,并且plot3d的设置有所不同(取决于在绘制之前还是之后设置,并且alt / az是从不同参考位置测量的。)

view

Toroid with line using mayavi

选项二-使用matplotlib(增加了一些不愉快)

如果您不能使用import numpy as np import mayavi.mlab as mlab from mayavi.api import OffScreenEngine mlab.options.offscreen = True # theta: poloidal angle | phi: toroidal angle # note: only plot half a torus, thus phi=0...pi theta = np.linspace(0, 2.*np.pi, 200) phi = np.linspace(0, 1.*np.pi, 200) # major and minor radius R0, a = 3., 1. x_circle = (R0 + a*np.cos(.0)) * np.cos(phi) y_circle = (R0 + a*np.cos(.0)) * np.sin(phi) z_circle = np.full_like(x_circle, a * np.sin(0.0)) # Delay meshgrid until after circle construction theta, phi = np.meshgrid(theta, phi) x_torus = (R0 + a*np.cos(theta)) * np.cos(phi) y_torus = (R0 + a*np.cos(theta)) * np.sin(phi) z_torus = a * np.sin(theta) mlab.figure(bgcolor=(1.0, 1.0, 1.0), size=(1000,1000)) mlab.view(azimuth=90, elevation=105) mlab.plot3d(x_circle, y_circle, z_circle) mlab.mesh(x_torus, y_torus, z_torus, color=(0.0, 0.5, 1.0)) mlab.savefig("./example.png") # mlab.show() has issues with rendering for some setups ,则可以使用mayavi完成此操作,这很令人不快。该方法基于creating transparent 'bridges' between surfaces and then plotting them together as one surface的思想。对于更复杂的组合而言,这并非微不足道,但这是一个环形直线示例,该直线非常简单

matplotlib

Toroid with line using mpl

注意在两种情况下,为了简化演示,我都更改了圆以匹配环形线圈的主半径,可以根据需要轻松地对其进行更改。