我对使用matplotlib
绘制独立数据集感兴趣。为此,我在X、Y和Z列中加入了独立的数据坐标。
考虑下面的python代码-
import numpy as np
import matplotlib.pyplot as plt
X = np.array([[1, 2 ,5], [6, 1, 7]])
Y = np.array([[4, 6, 9], [7, 1, 5]])
Z = np.array([[5, 7, 4], [2, 1, 6]])
fig1, (ax) = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot(X, Y, Z)
字符串
我相信对于二维数组,列表示单独的数据集,但行ax.plot(X, Y, Z)
产生以下错误-
ValueError: operands could not be broadcast together with remapped shapes [original-
>remapped]: (6,) and requested shape (2,)
...
AttributeError: 'Line3D' object has no attribute '_verts3d'
型
我可以通过将ax.plot(X, Y, Z)
替换为以下内容来生成所需的输出-
for i in range(X.shape[1]):
ax.plot(X[:, i], Y[:, i], Z[:, i])
型
有没有办法避免循环。
1条答案
按热度按时间ogsagwnx1#
TL;DR:
ax.scatter
可以,而ax.plot
不可以;所以我们可以插值点并使用散点。该解决方案效率低下,但可以根据需要删除for循环。例如,OP基于循环的解决方案的输出是:x1c 0d1x的数据
现在,让我们将OP原始代码中的
ax.plot(X, Y, Z)
行更改为ax.scatter(X, Y, Z)
。为完整起见,如下所示:字符串
输出量:
的
总的来说,
ax.scatter
的工作方式与ax.plot
不同!现在,如果我们简单地在线的端点之间插入几个点,我们可以获得与预期图相同的图。为了完整性,如下所示:
型
输出量:
的
如果我们希望每一行都有不同的颜色,我们可以将一个颜色列表传递给
ax.scatter
,列表的长度=点的总数,列表中的前N个项目具有第一行的颜色,依此类推。因此,使用以下内容,我们得到:型
的
它不使用for循环就完成了所需的绘图。