繁体   English   中英

如何将多个图形(由循环加载)绘制到同一个 3D 图中?

[英]How to plot multiple graphs (loaded by a loop) into the same 3D plot?

我的代码通过 for 循环加载 15 个时间序列数据。 然后将时间序列转换为 3D 相空间。 我想将 15 条轨迹绘制到一个3D 坐标系(相空间)中,但我的代码为每个时间序列( Data )创建了一个新的 3D 图。

这是我的代码的相关部分:

for Subject in Subjects:
    Data = np.loadtxt("path/to/files...")

    Colormap = plt.get_cmap("tab20c_r")
    Segment_Colormap = Colormap(np.linspace(0, 1, len(Subjects)))

    x_list = pd.Series(Data) # pd.Series
    y_list = x_list.shift(Mean_Lag) # pd.DataFrame.shift
    z_list = x_list.shift(Mean_Lag*2)

    plt.figure().add_subplot(projection="3d")
    plt.plot(x_list, y_list, z_list, lw=0.5,
         c=Segment_Colormap[Subjects.index(Subject)])

plt.show()

我知道问题是由于plt.figure().add_subplot(projection="3d")行是我的 for 循环的一部分。

但是,当我将相关代码行移出循环时,如下

    x_list = pd.Series(Data) # pd.Series
    y_list = x_list.shift(Mean_Lag) # pd.DataFrame.shift
    z_list = x_list.shift(Mean_Lag*2)

plt.figure().add_subplot(projection="3d")
plt.plot(x_list, y_list, z_list, lw=0.5,
         c=Segment_Colormap[Subjects.index(Subject)])

plt.show()

结果是我的代码只绘制了 for 循环的最后一个时间序列( Data )。 解决方案是什么,以便将 for 循环加载的所有 15 个文件都绘制到一个相同的 3D 图中? 我以前没有遇到过 2D 绘图的这个问题,所以 3D 绘图似乎有些不同。

在您的第一种情况下,问题是您在for循环中调用plt.figure().add_subplot(projection="3d") ,这意味着每次迭代都会创建一个新图形。

在第二种情况下,问题是您在for循环之外调用plt.plot(x_list, y_list, z_list, lw=0.5, c=Segment_Colormap[Subjects.index(Subject)]) ,这意味着只绘制了最后一次迭代(即使用x_listy_listz_list的最后一个值)。

要解决此问题,您需要两种情况的组合。 您想在for循环之外声明图形,然后在for循环内调用plot

例如(使用简单数据和两个for循环迭代):

x = [1, 2, 3, 4]
y = z = x
my_list = [x, [2*X for X in x]] # list of lists to be looped over

plt.figure().add_subplot(projection="3d")
for l in my_list:
    plt.plot(l, y, z)

输出:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM