Bokeh字形被屏幕边缘切断

时间:2016-03-07 19:40:18

标签: python 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 个答案:

答案 0 :(得分: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