Динамически изменить перенос текста и / или ориентацию для надписей в Bokeh? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать вложенную древовидную карту в Bokeh.Я могу создать прямоугольники с правильными размерами и вложенными элементами и нанести их на график, но не могу их пометить.Когда я использую LabelSet и добавляю макет, метки размещаются правильно, но если они слишком длинные, они выходят за границы полей, для которых они предназначены.Я хотел бы контролировать текст в полях так, чтобы:

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

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

Вот код, воспроизводящий проблему, с которой я столкнулся.Я пропустил разделы, которые должны были создать древовидную карту, и просто сделал пару прямоугольников вручную, чтобы все было просто.Заранее спасибо за помощь.

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, LabelSet
from bokeh.palettes import Spectral4

output_file('word_wrap.html')

f = figure()
left = [0, 0.5, 0.5, 0.5]
right = [0.5, 1, 1, 1]
top = [1, 1/3, 2/3, 1]
bottom = [0, 0, 1/3, 2/3]

labels = ['fits', 'still fits', 'why is that necessary?',
          'the sparrow warbles at midnight under the pale moonlight of a tuscan sun']
label_x = [0.25, 0.75, 0.75, 0.75]
label_y = [1, 1/3, 2/3, 1]

source = ColumnDataSource(dict(left=left, right=right, top=top, bottom=bottom,
                               line_colors=['black'] * len(left),
                               colors=Spectral4, labels=labels, 
                               label_x=label_x, label_y=label_y))

f.quad('left', 'right', 'top', 'bottom', source=source, 
       line_color='line_colors', fill_color='colors')

labels = LabelSet(x='label_x', y='label_y', text='labels', source=source, 
                  text_align='center', text_baseline='top', y_offset=-1)

f.add_layout(labels)
f.axis.visible = False
f.grid.visible = False

show(f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...