[英]Plotly: How to put two 3D graphs on the same plot with plotly.graph_objects?
[英]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_list
、 y_list
和z_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.