Боке нестандартная раскладка - PullRequest
0 голосов
/ 19 февраля 2019

Мой вопрос похож на тот, который представлен здесь .Я хочу создать вложенный макет с 2 столбцами в Bokeh:

enter image description here

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

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

import numpy as np

from bokeh.plotting import figure, curdoc, show
from bokeh.models import ColumnDataSource, FactorRange, CustomJS, Slider
from bokeh.models.widgets import Panel, Tabs
from bokeh.layouts import gridplot, row, column, layout

### Main Image
N = 500
x = np.linspace(0, 10, N)
y = np.linspace(0, 10, N)
xx, yy = np.meshgrid(x, y)
d = np.sin(xx)*np.cos(yy)

p1 = figure(plot_width=640, plot_height=480, x_range=(0, 10), y_range=(0, 10),
           tooltips=[("x", "$x"), ("y", "$y"), ("value", "@image")])
p1.image(image=[d], x=0, y=0, dw=10, dh=10, palette="Spectral11")
p1.axis.visible = False

### Bottom histogram
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
counts = [5, 3, 4, 2, 4, 6]

p2 = figure(plot_width=800, plot_height=200, x_range=fruits, title="Fruit Counts",
           toolbar_location=None, tools="")
p2.vbar(x=fruits, top=counts, width=0.9)
p2.xgrid.grid_line_color = None
p2.y_range.start = 0

### Right slider
t_slider = Slider(start=0.0, end=1.0, value=1.0, step=.01,
                  title="Threshold", width=140)

### Right image
N = 28
d = np.random.randint(low=0, high=10, size=(N, N))
p3 = figure(plot_width=140, plot_height=140, x_range=(0,N), y_range=(0,N), toolbar_location=None, title='Another image')
p3.image(image=[d], x=0, y=0, dw=N, dh=N, palette="Viridis11")
p3.axis.visible = False

l = gridplot([[p1, column(t_slider, p3)],[p3]])
curdoc().add_root(l)
show(l) 

1 Ответ

0 голосов
/ 19 февраля 2019

Недавно были предприняты большие усилия, чтобы полностью переработать макет в Боке с нуля.Эта работа была объединена, но еще не выпущена (это будет предстоящая версия 1.1).Когда я запускаю ваш код с 1.1.0dev6, результаты кажутся правильными:

enter image description here

Похоже, что он точно соответствует предоставленному макету (если я изменюнижний график до p2):

l = gridplot([[p1, column(t_slider, p3)],[p2]])

Итак, решение состоит в том, чтобы дождаться выпуска 1.1 (позднее в этом месяце) или, если вы хотите попробовать что-то раньше, установитьРазработка Dev .(Но обратите внимание: ресурсы JS / CSS для сборки dev * не гарантированно доступны навсегда. Вам не следует использовать сборки dev "in production", и следует как можно скорее перейти на реальную полную версию.)

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

l = column(gridplot([[p1, column(t_slider, p3)]]), p2)

, что приводит к:

enter image description here

...