Как вы меняете размер меток в легенде Боке в питоне?

У меня есть несколько кривых (разных цветов), нанесенных на один и тот же рисунок, и я хотел бы расширить соответствующие цветные линии в легенде, чтобы их было легче различать при проецировании на большой экран.

Я могу получить доступ к свойствам легенды в порядке, например размер шрифта текста метки легенды с помощью:

p1.legend.label_text_font_size = "15pt"

где p1 — фигура, о которой идет речь. Проблема в том, что я не знаю, как называются «цветные линии» в легенде, и, к сожалению, соответствующий раздел в документах пуст.


person airdas    schedule 18.03.2015    source источник


Ответы (6)


Вы можете просмотреть исходный код на GitHub

Единственный результат поиска для 'label_text_font_size' находится в этом файле: -

 bokeh/bokehjs/src/coffee/renderer/annotation/legend.coffee

и прокрутите вниз до класса Legend (строка 113 на момент написания этого), после чего вы сможете увидеть атрибуты класса. В настоящее время они: -

 display_defaults: ->
return _.extend {}, super(), {
level: 'overlay'
border_line_color: 'black'
border_line_width: 1
border_line_alpha: 1.0
border_line_join: 'miter'
border_line_cap: 'butt'
border_line_dash: []
border_line_dash_offset: 0
label_standoff: 15
label_text_font: "helvetica"
label_text_font_size: "10pt"
label_text_font_style: "normal"
label_text_color: "#444444"
label_text_alpha: 1.0
label_text_align: "left"
label_text_baseline: "middle"
glyph_height: 20
glyph_width: 20
label_height: 20
label_width: 50
legend_padding: 10
legend_spacing: 3
orientation: "top_right"
datapoint: null
}

.. ни один из них не выделяется как собственность, которую вы хотите, поэтому, возможно, это невозможно изменить, но вы, возможно, захотите поиграть?

NB Я не думаю, что все свойства имеют сеттеры, поэтому вам, возможно, придется установить их, используя что-то вроде этого: p.legend.__setattr__('label_text_color', "#FF0000")

NB Bokeh написан на CoffeeScript, с которым у меня нет опыта, так что это может быть все бесполезно.

person jacanterbury    schedule 18.03.2015

Следующее (как предложил @ciornav) работает для меня в боке 0.13.0:

p.legend.label_text_font_size = '20pt'

как описано здесь.

Будьте осторожны, когда вы помещаете этот код. Когда это, например. между вашими операторами p.figure() и p.line() он не вступит в силу, поскольку кажется, что он переопределен.

Поместите код после создания всех артефактов перед p.show() или p.save().

person hnhn    schedule 26.07.2018
comment
Спасибо за последний комментарий. Сначала мне было интересно, почему это не сработало. Ссылка, кажется, не указывает на правильную часть документов. Я не вижу там label_text_font_size. Может быть ссылка на легенду или свойства текста? - person Roald; 18.09.2018

Это свойства glyph_height и glyph_width. Протестировано на точечной диаграмме, по умолчанию они установлены на 20 и 20 соответственно. Вы можете сделать их больше при создании элемента легенды:

legend = Legend(...,
                glyph_height=30,
                glyph_width=30,
                ...)

К сожалению, я попытался установить его после того, как легенда уже была построена, и, похоже, это не сработало ... Хотя я могу ошибаться.

Редактировать: Кроме того, я использую Bokeh 0.12.7.

person Cassian Corey    schedule 01.11.2017

В текущей версии Боке (1.2) вы можете изменить размер объекта в легенде, используя:

p.legend.glyph_height = #some int
p.legend.glyph_width = #some int
p.show()

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

person J Schmidt    schedule 30.05.2019

Начиная с Боке 0.12.6, это невозможно. Легенды автоматически используют точно такие же визуальные свойства (например, цвет, размер, ширина) объекта, который они представляют. Таким образом, чтобы сделать линию в легенде толще, вам нужно сделать толще саму линию.

Возможность переопределить что-то может быть разумным запросом, я призываю вас создать проблему на GitHub, чтобы обсудить предложение функции:

https://github.com/bokeh/bokeh/issues

person bigreddot    schedule 14.08.2017

Возможно, это могло бы помочь:

http://docs.bokeh.org/en/0.10.0/docs/user_guide/styling.html#id4

команда, которая должна работать.... просто адаптируйте свой размер:

p.legend.label_text_font_size = '30pt'
person CVname    schedule 14.08.2017