Для зацикливания подзаголовков с помощью Datashader / Holoviews / Bokeh

Общая нотация для создания подзаголовков с помощью datashade / holoviews / Bokeh использует нотацию '+':

plot = plot1 + plot2 + plot3

Однако я пытаюсь создавать графики внутри цикла for, как я могу с Matplotlib. В 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 (), но это не работает при использовании внутренних функций или в конечном итоге приводит к другим ошибкам.


person Stigma    schedule 25.01.2019    source источник


Ответы (1)


Вы можете программно создавать макеты, передавая список элементов hv.Layout. В этом случае следующая строка должна помочь:

hv.Layout([plot1, plot2, plot3, plot4]).cols(1)
person jlstevens    schedule 25.01.2019
comment
Или, чтобы учесть весь приведенный выше код, hv.Layout([dynspread(datashade(hv.Curve(df[c]))) for c in ['T','A','B','C']]).cols(1). - person James A. Bednar; 25.01.2019