Боке как добавить легенду к фигуре, созданной многострочным методом?

Я пытаюсь добавить легенду к фигуре, которая содержит две строки, созданные методом multi_line. Пример:

p = figure(plot_width=300, plot_height=300)
p.multi_line(xs=[[4, 2, 5], [1, 3, 4]], ys=[[6, 5, 2], [6, 5, 7]], color=['blue','yellow'], legend="first")

в этом случае легенда предназначена только для первой строки. Когда легенда определяется как список, возникает ошибка:

p.multi_line(xs=[[4, 2, 5], [1, 3, 4]], ys=[[6, 5, 2], [6, 5, 7]], color=['blue','yellow'], legend=["first","second"])

можно ли добавить легенду ко многим строкам?

3 ответов


Сопровождающий Примечание: PR #8218 который будет объединен для Bokeh 1.0, позволяет создавать легенды непосредственно для нескольких строк и патчей, без каких-либо циклов или использования отдельных line звонки.


multi_line предназначен для концептуально единичных вещей, которые имеют несколько субкомпонентов. Подумайте о штате Техас, это одна логическая вещь, но она имеет несколько различных (и непересекающихся) полигонов. Вы можете использовать Patches делать все polys для "Texas", но вы хотите только одну легенду в целом. Легенды обозначают логические вещи. Если вы хотите пометить несколько строк как логически различные вещи, вам нужно будет нарисовать их все отдельно с помощью p.line(..., legend="...")


Сопровождающий Примечание : PR #8218 который будет объединен для Bokeh 1.0, позволяет создавать легенды непосредственно для нескольких строк и патчей без каких-либо циклов.


чтобы сделать это быстрее, когда у вас много данных или большая таблица и т. д. Вы можете сделать цикл for:

1) Составьте список цветов и легенд

вы всегда можете импортировать боке paletts для ваших цветов
из боке.палитры импорт " ваш палитр"
Проверьте эту ссылку: боке.palets

colors_list = ['blue', 'yellow']
legends_list = ['first', 'second']
xs=[[4, 2, 5], [1, 3, 4]]
ys=[[6, 5, 2], [6, 5, 7]]

2) ваша фигура

p = figure(plot_width=300, plot_height=300)

3) Сделайте для цикла throgh вышеуказанные списки и покажите

for (colr, leg, x, y ) in zip(colors_list, legends_list, xs, ys):
    my_plot = p.line(x, y, color= colr, legend= leg)

show(p)

в более поздних выпусках (начиная с 0.12.15, я думаю) можно добавлять легенды к многострочным сюжетам. Вам просто нужно добавить запись "легенда" в источник данных. Вот пример, взятый из дискуссионного форума Google Groups:

data = {'xs': [np.arange(5) * 1, np.arange(5) * 2],
        'ys': [np.ones(5) * 3, np.ones(5) * 4],
        'labels': ['one', 'two']}

source = ColumnDataSource(data)

p = figure(width=600, height=300)
p.multi_line(xs='xs', ys='ys', legend='labels', source=source)