Меньший диапазон заполнения для изображения с боке - PullRequest
0 голосов
/ 18 марта 2019

Я использую bokeh 1.0.4, и я хотел бы создать графическое изображение в боке, используя match_aspect=True. Вот пример кода для иллюстрации:

from bokeh.models.ranges import DataRange1d
from bokeh.plotting import figure, show
import numpy as np

arr = np.array([[1,2,3],[4,5,6]])

plot = figure(match_aspect=True)
plot.image([arr], x=0, y=0, dw=3, dh=2)

show(plot)

Вот что я получаю: Plot without given ranges

Вокруг данных много пустого пространства, слишком много для моего приложения, и я хотел бы, чтобы оси были более узкими - зная, что в настоящее время это невозможно сделать идеально, см. Этот другой вопрос в раздел «Обновление».

Итак, я попытался использовать параметр range_padding, который должен быть относительно размеров изображения (единица измерения по умолчанию: проценты), но он не работает для меня, например. если я использую

from bokeh.models.ranges import DataRange1d
from bokeh.plotting import figure, show
import numpy as np

arr = np.array([[1,2,3],[4,5,6]])

x_range = DataRange1d(range_padding=5, range_padding_units='percent')
y_range = DataRange1d(range_padding=5, range_padding_units='percent')

plot = figure(x_range=x_range, y_range=y_range, match_aspect=True)
plot.image([arr], x=0, y=0, dw=3, dh=2)

show(plot)

отступ еще больше:

imagerange_padding">

Маленькие значения заполнения, такие как 0.05, похоже, не имеют никакого эффекта. Также я не могу использовать start и end аргументы для диапазонов, потому что тогда соответствующее соотношение сторон потеряно. Квадрат в пространстве данных должен соответствовать квадрату на экране.

Я что-то упустил при использовании здесь параметров range_padding? У кого-нибудь есть идеи, как уменьшить пространство вокруг изображения таким образом, чтобы соответствующий аспект сохраняется?

Обновление

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

1 Ответ

1 голос
/ 19 марта 2019

Является ли этот обходной путь приемлемым для вас (Bokeh v1.0.4)?

from bokeh.models.ranges import DataRange1d
from bokeh.plotting import figure, show
from bokeh.layouts import Row
from bokeh.palettes import Greys
from bokeh.models import LinearColorMapper, ColorBar
import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

sx = 3
sy = 2

x_range = DataRange1d(start = 0, end = sx, bounds = (0, sx), range_padding = 5, range_padding_units = 'percent')
y_range = DataRange1d(start = 0, end = sy, bounds = (0, sy), range_padding = 5, range_padding_units = 'percent')

pw = 400
ph = pw * sy / sx
plot = figure(plot_width = pw,
              plot_height = ph,
              x_range = x_range,
              y_range = y_range,
              match_aspect = True)
plot.image([arr], x = 0, y = 0, dw = sx, dh = sy)

color_mapper = LinearColorMapper(palette = Greys[6], low = arr.min(), high = arr.max())
colorbar_plot = figure(plot_height = ph, plot_width = 69, x_axis_location = None, y_axis_location = None, title = None, tools = '', toolbar_location = None)
colorbar = ColorBar(color_mapper = color_mapper, location = (0, 0))
colorbar_plot.add_layout(colorbar, 'left')

show(Row(plot, colorbar_plot))

Результат:

enter image description here

...