python - 如何在 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 线。
解决方案
如果您使用 numpy 数组,您可以使用它np.where
来获取每个唯一 X 值出现的索引。然后使用这些索引进行切片xs
,ys
并zs
在每次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()
推荐阅读
- php - 如何同时使用 for 和 foreach
- openstreetmap - 如何将 tileserver-gl 与免费地图一起使用?
- vba - 在 Excel VBA 中运行 Curl 命令
- android - 如何在 Android 中检查 Retrofit API 调用是否成功
- javascript - Javascript日期表现奇怪
- python - Python 数据比较
- ignite - 点燃计算网格作业坐标/调用
- javascript - Mongoose .find() 在没有匹配结果时返回 200 响应和空数组
- angularjs - 未创建角度降级组件
- javascript - 如何获取html文件中单词的坐标