2016-03-07 3 views
1

Я рисую несколько кругов разного размера (пузырьковая диаграмма) в боке, но выбросы к краю карты слишком большие, и весь пузырь не показан на экранное пространство. Есть ли способ удостовериться в том, что сюжет bokeh INITIALLY (когда он первый показывает) содержит все, независимо от того, насколько большой может быть пузырь? Я мог бы использовать рабочие обходы, например, рисовать невидимый глиф на краю пузырьков, но я предпочел бы более прямое решение, которое я не мог найти ни в документации, ни на форумах. Благодаря!Значки Bokeh обрезаются краем экрана

Соответствующий код прямо сейчас выглядит следующим образом:

p = figure(title=title, tools=TOOLS, plot_width=800, plot_height=700) 
    p.xaxis.axis_label = x_label 
    p.yaxis.axis_label = y_label 
    p.circle(x=x_data,y=y_data, source=source,\ 
    size=bubble_radi,line_color=border_color,line_width=1,fill_alpha=.8) 

ответ

1

Когда вы установите размер глифа, определяется в единицах «экрана», которые непосредственно не связаны с блоками данных. Я думаю, что самый простой способ убедиться, что ни одна часть кругов не будет отключена, - это определить их радиусы в единицах данных. Это можно сделать, установив атрибут radius, который по умолчанию определяется в единицах данных, вместо атрибута size. (например, p.circle(x=x_data, y=y_data, source=source, radius=bubble_radi) и вычисления желаемого диапазона x и y_range на основе минимальных и максимальных точек данных плюс/минус радиусы окружности.

Теперь необходимо рассмотреть одну сложную задачу: круг может иметь только один радиус, который должен определяется как в единицах x-данных, так и в единицах y-данных. Предполагая, что единицы измерения одинаковы, вы, вероятно, захотите установить радиус на основе измерения y-данных, потому что ваша ширина фигуры больше высоты фигуры. Для этого вы должны использовать radius_dimension атрибут: p.circle(x=x_data, y=y_data, source=source, radius=bubble_radi, radius_dimension='y')

полный пример здесь:

from bokeh.plotting import figure, output_file, show 
from bokeh.models import ColumnDataSource, Circle 
import numpy as np 
x_data, y_data = np.arange(0, 100, 10), 100-np.arange(0, 100, 10) 

output_file("bubbles.html") 

bubble_radi = 10. 
border_color = 'red' 

source = ColumnDataSource({'x_data': x_data, 'y_data': y_data}) 

x_range = (x_data.min() - bubble_radi, x_data.max() + bubble_radi) 
y_range = (y_data.min() - bubble_radi, y_data.max() + bubble_radi) 
p = figure(title='title', plot_width=800, plot_height=700, x_range=x_range,\ 
y_range=y_range) 
p.xaxis.axis_label = 'x_label' 
p.yaxis.axis_label = 'y_label' 
p.circle(x=x_data, y=y_data, source=source,\ 
radius=bubble_radi, radius_dimension='y',\ 
line_color=border_color,line_width=1,fill_alpha=.8) 

show(p) 

, который возвращает этот график: enter image description here

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