2016-01-21 4 views

ответ

7

Figure использует по умолчанию DataRange1d объектов, что приводит к автоматическому вычислению диапазона. Но это происходит в браузере, поскольку он учитывает информацию, такую ​​как степень глифа, которая равна только, доступная во время рендеринга. Причина, по которой my_figure.y_range.end * 1.3 не работает, заключается в том, что «автоматическое» значение end еще не известно. Он устанавливается автоматически внутри браузера. Вы можете переопределить «автоматическое» поведение DataRange путем подачи start и end, но вы должны дать ему явное, числовое значение, которое вы хотите, то есть:

my_figure.y_range.end = 10 

В качестве альтернативы DataRange1d модели имеет range_padding свойство, может установить, который контролирует количество добавленных дополнений к автоматически вычисляемым границам. Он описан здесь:

http://bokeh.pydata.org/en/latest/docs/reference/models/ranges.html#bokeh.models.ranges.DataRange1d.range_padding

Это может сделать то, что вы хотите по-другому, но учтите, что это влияет и на начало и конец.

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

p = figure(..., x_range=(10, 20)) 

Это создаст фиксированный Range1d для ось x с start=10 и end=20.

+0

спасибо! Явным способом является мой «друг»: 'my_figure.y_range.start = -1 - (df ['my_attr']. Max() - df ['my_attr']. Min())/20' и' my_figure.y_range .end = df ['my_attr']. max() * 1.3 + 1'. '+/- 1' необходимо, потому что я не знаю, является ли' my_attr' нулевым или нет. – ragesz

+0

Отличный ответ - спасибо. Наконец он объяснил миф о том, как диапазоны ведут себя в боке для меня. – pansen

Смежные вопросы