Когда вы установите размер глифа, определяется в единицах «экрана», которые непосредственно не связаны с блоками данных. Я думаю, что самый простой способ убедиться, что ни одна часть кругов не будет отключена, - это определить их радиусы в единицах данных. Это можно сделать, установив атрибут 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)
, который возвращает этот график: