如何使用 bokeh 在图表中最初显示分类轴的一部分?

5

我有一个分类数据文件,例如100个国家及其人口。我想在jupyter笔记本中使用bokeh绘制柱形图。现在我需要在第一时间只显示前十个城市。当我使用pan或wheel zoom工具时,我可以看到其他城市的条形图。

当使用连续/数值轴时,我发现这很容易做到。可能是因为bokeh知道连续/数值轴的逻辑而不是分类数据的逻辑。

现在我只使用了一个小例子来展示我尝试过的内容。我尝试限制分类的y_range

from bokeh.plotting import figure, show, output_notebook

factors = ["a", "b", "c", "d", "e", "f", "g", "h"]
x =  [50, 40, 65, 10, 25, 37, 80, 60]

p1 = figure(title="Dot Plot", tools="pan,reset", y_range=factors, x_range=[0,60])
p1.circle(x, factors, size=10, fill_color="orange", line_color="green", line_width=3, )
output_notebook()
show(p1);

你可以看到max(x)为80,而x_range受限于[0,60]
当向右滚动图表时,我们可以看到2个x(等于65和80)看起来很好。
然而,当我将y_range限制如下时;
p1 = figure(title="Dot Plot", tools="pan,reset", y_range=factors[0:4], x_range=[0,60])

看起来很不错: categorical_axis_limit

但是当我滑动时,我发现有几个点在水平线上,没有相应的y值。 categorical_axis_limit_pan

欢迎任何想法。非常感谢。 由于这是我第一次提出问题,请告诉我是否有不适当的地方。


我在https://gitter.im/bokeh/bokeh上问了这个问题,并得到了下面的答案。如果您遇到相同的问题,请一起等待。非常感谢bokeh开发人员。 gitter Q&A

1个回答

0

如果您仍然感兴趣,我成功地使用滑块小部件制作了一个解决方法:

from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Slider
from bokeh.io import show
from bokeh.plotting import Figure, vplot, curdoc
from bokeh.models.layouts import VBox

factors = ["a", "b", "c", "d", "e", "f", "g", "h"]
x =  [50, 40, 65, 10, 25, 37, 80, 60]

source = ColumnDataSource(data=dict(x=x[0:4],y=factors[0:4]))

p1 = Figure(title="Dot Plot", tools="pan,reset", y_range=factors[0:4], x_range=[0,100])
p1.circle(x='x', y='y', source=source, fill_color="orange", size=100, line_color="green", line_width=3)
slider = Slider(title='Scroll',start=0,value=0,end=len(factors)-4,step=1)

def update(attrname,old,new):
    source.data = dict(x=x[0+slider.value:4+slider.value],y=factors[0+slider.value:4+slider.value])
    print(source.data)
    p1.y_range.factors = factors[0+slider.value:4+slider.value]

slider.on_change('value',update)

p = VBox(p1,slider,width=p1.plot_width)

curdoc().add_root(p)

show(p)

它基本上是通过您的数据滚动。不幸的是,现在存在一个问题,如果边缘处的字形太小,则会被隐藏,但增加它们的大小是一个快速修复。此外,这很遗憾不能与缩放一起使用,但我相信很容易添加另一个滑块上的“缩放”,并只需修改要显示的范围的变量(我只使用了4)。


嗨!我已经尝试了这段代码,但似乎无法解决我的问题。因为你一开始隐藏的其他因素并不在它们应该在的位置上。当我使用平移工具时,仍然找不到它们。无论如何还是谢谢你们。 - Katherine Hou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接