Как добавить расстояние между виджетами Bokeh - PullRequest
0 голосов
/ 16 апреля 2020

Мне было интересно, как лучше добавить интервал между виджетами в Bokeh? Прямо сейчас я использую пустые Div, чтобы получить некоторый интервал, но это действительно неуклюжий, отсюда вопрос.

import pandas as pd

from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn, Div
from bokeh.layouts import row, column
from bokeh.models.widgets import MultiSelect, Button, RadioGroup


def test_view(request):
    # Quick data
    original_data = dict(length=[2, 10, 20, 40, 60, 80, 70, 50, 15, 36, 76, 74, 72, 44, 36, 18, 40, 64, 40, 64, 40, 30, 120],
                         weight=[2, 100, 150, 200, 420, 700, 600, 300, 200, 200, 620, 610, 601, 610, 601, 80, 205, 80, 800, 700, 240, 160, 800])

    original_data = pd.DataFrame(original_data)
    source = ColumnDataSource(original_data)

    # Quick plot
    plot = figure(title = 'title')
    plot.circle(x='length', y='weight', source=source)

    # Quick table
    columns = [TableColumn(field="length", title="length", width=100),
               TableColumn(field="weight", title="weight", width=100)]
    data_table = DataTable(source=source, columns=columns)

    # Quick widgets
    some_button = Button(label="button", button_type="success")
    some_radiogroup = RadioGroup(labels=["1", "2"], active=0)
    some_multiselect = MultiSelect(title='multiselect:', value=[], options=[])

    # Spacing
    dumdiv1 = Div(text='', width=10)
    dumdiv2 = Div(text='', width=10)

    widgets_layout = column(some_button, dumdiv1, some_radiogroup, dumdiv2, some_multiselect)
    figures_layout = row(plot, data_table)
    page_layout = row(widgets_layout, figures_layout)

    show(page_layout)

Спасибо,

1 Ответ

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

Класс Widget расширяет класс LayoutDOM, который имеет атрибут margin.

from bokeh.io import show
from bokeh.layouts import gridplot
from bokeh.models import Div


def mk_div(**kwargs):
    return Div(text='<div style="background-color: green; width: 100px; height: 100px;">DIV</div>', **kwargs)


divs = [mk_div(), mk_div(), mk_div(),
        mk_div(), mk_div(margin=(10, 20, 30, 40)), mk_div(),
        mk_div(), mk_div(), mk_div()]

show(gridplot(divs, ncols=3))
...