Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib:在三维极坐标图中填充线下_Python_Matplotlib_Plot - Fatal编程技术网

Python matplotlib:在三维极坐标图中填充线下

Python matplotlib:在三维极坐标图中填充线下,python,matplotlib,plot,Python,Matplotlib,Plot,我想在圆上画一个正弦波:也就是说,圆在x,y平面上,正弦波绕着它垂直于该平面(竖起z轴)。我可以这样做,但当我尝试用多边形填充圆和正弦波之间的区域时(即在我的正弦波所在的假想圆柱体的表面上绘制),我不能完全正确地理解它-matplotlib似乎对绘图视图中重叠的区域进行异或运算,而不是给我一个视图,其中前面的区域遮挡后面的区域。 以下是我代码的相关部分: fig = plt.figure() ax = fig.gca(projection='3d') ax._axis3don = False t

我想在圆上画一个正弦波:也就是说,圆在x,y平面上,正弦波绕着它垂直于该平面(竖起z轴)。我可以这样做,但当我尝试用多边形填充圆和正弦波之间的区域时(即在我的正弦波所在的假想圆柱体的表面上绘制),我不能完全正确地理解它-matplotlib似乎对绘图视图中重叠的区域进行异或运算,而不是给我一个视图,其中前面的区域遮挡后面的区域。 以下是我代码的相关部分:

fig = plt.figure()
ax = fig.gca(projection='3d')
ax._axis3don = False
theta = np.linspace(0., 2 * np.pi, 1000)
r = 1.
x = r * np.sin(theta)
y = r * np.cos(theta)
sinez = N * np.sin(theta * m)
ax.plot(x, y, sinez, color='r')
xv = np.append(x, x[::-1])
yv = np.append(y, y[::-1])
zv = np.append(sinez, np.zeros(n))
verts = [zip(xv,yv,zrev),]
poly = Poly3DCollection(verts, facecolors = [cc('r'), cc('b')],
                        edgecolor='None')
poly.set_alpha(0.7)
ax.add_collection3d(poly)
下面是它的样子:

在中,开发人员声称
Poly3DCollection

对_facecolors和_edgecolors属性进行了一些神奇的处理

我相信这就是你们可以在这里看到的异或效应,看看这个函数,它似乎是发挥魔力的函数
do_3d_projection


在我看来,您可以将
Poly3DCollection
子类化并重写
do\u 3d\u projection
,以获得所需的内容,或者考虑另一种方法来绘制此图(可能以某种方式将正弦曲线和圆视为单独的对象)。

matplotlib
存在的主要原因是二维绘制,3D的东西只是一些巧妙的变换,可能有问题。固有的限制之一是
matplotlib
在层中绘制,因此它没有“前面”或“后面”的概念,它只知道in将曲线绘制到画布的顺序(令人困惑的称为z顺序)

如果您想在不重新编写3D代码的情况下使其看起来正确,请将正弦波拆分为多个部分,并确保手动设置z顺序(请参阅以获取更简单的版本),但您将无法旋转图像


如果你需要真正的3D,我建议你研究一下基于OpenGL的
mayavi

啊,不朽的matplotlib文档。我想知道这里面有什么“魔法”。我不确定自己是否能胜任编辑matplotlib源代码的工作,但我注意到XOR效果只会出现在我的圆的同一侧的循环中,因此也许我应该更改定义多边形的方向。