2016-03-07 49 views
1

我在散景中绘制了一些不同大小的圆圈(气泡图),但是朝向地图边缘的异常值太大,整个气泡未显示在屏幕上屏幕空间。有没有办法确保散点图(初次渲染时)包含所有内容,而不管泡沫有多大?我可以使用的解决方法,比如在气泡边缘绘制一个隐形字形,但我更喜欢更直接的解决方案,在文档或论坛中找不到任何地方。谢谢!散景字形被屏幕边缘切断

相关代码现在如下:

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范围

现在,需要考虑的一件棘手的事情是圆圈只能有一个半径,可以用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