首页 > 解决方案 > 如何在 matplotlib 上为 3D 绘图绘制单独的线

问题描述

我有三个变量:

xs = [1,1,1,2,2,2,3,3,3], 
ys = [1,2,3,1,2,3,1,2,3], 
zs = [1,4,9,2,8,18,4,16,36]

我想通过固定 xs 来绘制具有 3 条单独线的图形,例如说 x = 2 我想看到ys = [1,2,3], zs = [2,8,18]在这种情况下应该是 ys 和 zs 的线(其中 x = 2)。我希望能够为 xs 中的每个唯一 x 看到不同的线,但在同一个图中。有谁知道我该怎么做?

我已经尝试过使用它,ax.plot3D(xs,ys,zs)但正如您所期望的那样,它连接了点,使其成为一条连续的 3d 线。

标签: pythonmatplotlibplot

解决方案


如果您使用 numpy 数组,您可以使用它np.where来获取每个唯一 X 值出现的索引。然后使用这些索引进行切片xsyszs在每次ax.plot3D调用时:

import matplotlib.pyplot as plt
import numpy as np

# Create numpy arrays
xs = np.array([1,1,1,2,2,2,3,3,3])
ys = np.array([1,2,3,1,2,3,1,2,3])
zs = np.array([1,4,9,2,8,18,4,16,36])

# Create Figure and 3D Axes
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

# Iterate over unique values in xs array
for unique_x in np.unique(xs):
    # Slice arrays and plot
    xvals = xs[np.where(xs == unique_x)]
    yvals = ys[np.where(xs == unique_x)]
    zvals = zs[np.where(xs == unique_x)]
    ax.plot3D(xvals, yvals, zvals)

# Display Figure
plt.show()

输出: 在此处输入图像描述


推荐阅读