matplotlib在3D中绘制多条线

时间:2013-10-30 09:55:44

标签: python matplotlib plot mplot3d

我正在尝试使用matplotlib在3D绘图中绘制多条线。我有6个数据集,其中包含x和y值。到目前为止我所尝试的是,给数据集中的每个点一个z值。因此,数据集1中的所有点都具有z = 1,数据集2的所有点都具有z = 2,依此类推。 然后我将它们导出到三个文件中。 “X.txt”包含所有x值,“Y.txt”包含所有y值,“Z.txt”相同。

到目前为止,这是代码:

        #!/usr/bin/python
        from mpl_toolkits.mplot3d import axes3d
        import matplotlib.pyplot as plt
        import numpy as np
        import pylab

        xdata = '/X.txt'
        ydata = '/Y.txt'
        zdata = '/Z.txt'

        X = np.loadtxt(xdata)
        Y = np.loadtxt(ydata)
        Z = np.loadtxt(zdata)

        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        ax.plot_wireframe(X,Y,Z)
        plt.show()

我得到的东西看起来非常接近我需要的东西。但是当使用线框时,每个数据集的第一个点和最后一个点都是连接的。如何更改每个数据集的线条颜色以及如何删除数据集之间的连接线?

有没有比线框更好的绘图风格?

1 个答案:

答案 0 :(得分:4)

单独加载数据集,然后逐个绘制每个数据集。

我不知道你有什么格式,但你想要这样的东西

from mpl_toolkits.mplot3d.axes3d import Axes3D
import matplotlib.pyplot as plt
fig, ax = plt.subplots(subplot_kw={'projection': '3d'})

datasets = [{"x":[1,2,3], "y":[1,4,9], "z":[0,0,0], "colour": "red"} for _ in range(6)]

for dataset in datasets:
    ax.plot(dataset["x"], dataset["y"], dataset["z"], color=dataset["colour"])

plt.show()

每次在plot对象上调用plot_wireframe(或axes但我不知道您需要什么时),它都会将数据添加为新系列。如果你遗漏了color参数matplotlib将为你选择它们,但它不太聪明,在你添加太多系列之后它会循环并再次开始使用相同的颜色。

n.b。我没有测试过这个 - 不记得color是否是正确的论点。很确定它确实如此。