Как получить многострочный заголовок для сюжета holoviews? - PullRequest
1 голос
/ 25 апреля 2020

Мне бы хотелось, чтобы в качестве опции для заголовка объекта сюжета holoviews была указана более одной строки. Разрешены только строки, и кажется, что то, что работает для оператора печати, не работает для заголовка.

import numpy as np
import holoviews as hv
hv.extension('bokeh')
from holoviews import opts

plot_title = 'Line 1 \nLine 2'
plot_title
# printing results in two lines, the \n is recognized
print(plot_title)

# the \n is ignored when the string is used for a title
points = [(0.1*i, np.sin(0.1*i)) for i in range(100)]
hv.Curve(points).opts(title=plot_title)

simple plot

1 Ответ

1 голос
/ 27 апреля 2020

HoloViews использует bokeh в качестве бэкенда в вашем примере, и эта функция, то есть многострочный заголовок, пока не поддерживается bokeh. Обратите внимание, что ваш вопрос похож на этот: Как создать заголовок многострочного сюжета в bokeh? и что теперь (27/04/2020) есть связанная открытая проблема по bokeh https://github.com/bokeh/bokeh/issues/7317.

Я вижу два способа получения многострочного заголовка для вашего сюжета.

Первый адаптирован из другого вопроса SO и использует боке непосредственно для добавления заголовков в виде макет:

import numpy as np
import holoviews as hv
import bokeh.io
from bokeh.models import Title
hv.extension('bokeh')

points = [(0.1*i, np.sin(0.1*i)) for i in range(100)]

hv_curve = hv.Curve(points)
bk_curve = hv.render(hv_curve)
bk_curve.add_layout(Title(text="Sub-Title", text_font_style="italic"), 'above')
bk_curve.add_layout(Title(text="Title", text_font_size="16pt", text_font_style="bold"), 'above')
bokeh.io.show(bk_curve)

bokeh solution

Второй использует panel (зависимость HoloViews сейчас ) для отображения заголовков в виде двух панелей Markdown (это также может быть одна панель HTML), центрированных в макете Column над кривой:

import numpy as np
import holoviews as hv
hv.extension('bokeh')
import panel as pn
pn.extension()

points = [(0.1*i, np.sin(0.1*i)) for i in range(100)]

hv_curve = hv.Curve(points)
panel_layout pn.Column(
    pn.pane.Markdown("**Title**", align="center"),  # bold
    pn.pane.Markdown("*Sub-title*", align="center"),  # italic
    hv_curve
)
panel_layout

panel solution

Если вы запустите panel_layout.pprint(), вы сможете проверить структуру этого макета.

Column
    [0] Markdown(str, align='center')
    [1] Markdown(str, align='center')
    [2] HoloViews(Curve)

Примечание: Запустите с Holoviews 1.13.2, bokeh 2.0.1 и panel 0.9.5.

...