当您设置的字形的大小,它在“屏幕”,这些不直接相关的数据单元的定义。我认为确保没有任何部分圆圈被切断的最简单方法是以数据单位定义它们的半径。这可以通过设置radius
属性来完成,默认情况下该属性是以数据单位定义的,而不是size
属性。 (例如p.circle(x=x_data, y=y_data, source=source, radius=bubble_radi)
并根据最小和最大数据点加上/减去圆半径计算所需的x范围和y范围
现在,需要考虑的一件棘手的事情是圆圈只能有一个半径,可以用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](https://i.stack.imgur.com/FnSqu.png)