Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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_3d - Fatal编程技术网

Python 垂直填充三维matplotlib绘图

Python 垂直填充三维matplotlib绘图,python,matplotlib,plot,3d,Python,Matplotlib,Plot,3d,我使用matplotlib制作了一个3d绘图。现在,我想填充绘制的直线和x,y轴之间的垂直空间,以高亮显示z轴上直线的高度。在2d绘图上,这将通过fill_-between完成,但3d绘图似乎没有任何类似之处。有人能帮忙吗 这是我目前的代码 from stravalib import Client import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt ... code to get the dat

我使用matplotlib制作了一个3d绘图。现在,我想填充绘制的直线和x,y轴之间的垂直空间,以高亮显示z轴上直线的高度。在2d绘图上,这将通过
fill_-between
完成,但3d绘图似乎没有任何类似之处。有人能帮忙吗

这是我目前的代码

from stravalib import Client
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

... code to get the data ....

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
zi = alt
x = df['x'].tolist()
y = df['y'].tolist()
ax.plot(x, y, zi, label='line')
ax.legend()
plt.show()     
以及当前的绘图

只是想澄清一下,我想要一个垂直填充到x,y轴的交点,而不是这个


你说得对。在3D绘图中,2D绘图功能似乎没有等效功能。我建议的解决方案是将数据转换为三维多边形。以下是相应的代码:

import math as mt
import matplotlib.pyplot as pl
import numpy as np
import random as rd

from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection


# Parameter (reference height)
h = 0.0

# Code to generate the data
n = 200
alpha = 0.75 * mt.pi
theta = [alpha + 2.0 * mt.pi * (float(k) / float(n)) for k in range(0, n + 1)]
xs = [1.0 * mt.cos(k) for k in theta]
ys = [1.0 * mt.sin(k) for k in theta]
zs = [abs(k - alpha - mt.pi) * rd.random() for k in theta]

# Code to convert data in 3D polygons
v = []
for k in range(0, len(xs) - 1):
    x = [xs[k], xs[k+1], xs[k+1], xs[k]]
    y = [ys[k], ys[k+1], ys[k+1], ys[k]]
    z = [zs[k], zs[k+1],       h,     h]
    #list is necessary in python 3/remove for python 2
    v.append(list(zip(x, y, z))) 
poly3dCollection = Poly3DCollection(v)

# Code to plot the 3D polygons
fig = pl.figure()
ax = Axes3D(fig)
ax.add_collection3d(poly3dCollection)
ax.set_xlim([min(xs), max(xs)])
ax.set_ylim([min(ys), max(ys)])
ax.set_zlim([min(zs), max(zs)])
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")

pl.show()
它生成以下图形:


我希望这会对您有所帮助。

对于Python3,您需要将v.append(zip(x,y,z))更改为v.append(list(zip(x,y,z)))