使用datashade / holoviews / Bokeh创建子图的一般符号是使用“ +”符号:

plot = plot1 + plot2 + plot3


但是,我试图像在Matplotlib中一样在for循环中生成图。在Seaborn中,我可以通过在数据框中增加增量来创建子图:

fig, axes = plt.subplots(nrows=len(DF_cols), ncols=1, figsize=(10,10), sharex = True)

count = 0
for i in DF_cols:
     sns.lineplot(data=df[i], label=i, ax=axes[count])
     count += 1

return fig, axes


如何将我下面用于Datashade / Holoviews的方法转换为更自动化的过程?

c1 = hv.Curve(df['T'])
c2 = hv.Curve(df['A'])
c3 = hv.Curve(df['B'])
c4 = hv.Curve(df['C'])
plot1 = dynspread(datashade(c1))
plot2 = dynspread(datashade(c2))
plot3 = dynspread(datashade(c3))
plot4 = dynspread(datashade(c4))
plot = (plot1 + plot2 + plot3 + plot4).cols(1)
plot


我最初的方法是使用创建自定义字符串来模仿常规的Datashade表示法并在其上运行exec(),但是在使用内部函数时它不起作用,否则最终会遇到其他错误。

最佳答案

您可以通过将元素列表传递给hv.Layout来以编程方式创建布局。在这种情况下,以下几行应该可以解决问题:

hv.Layout([plot1, plot2, plot3, plot4]).cols(1)

09-26 14:39