条形图的Bokeh对数比例尺

6
我知道使用bokeh绘图API可以实现对数比例尺:

我知道使用bokeh绘图API可以实现对数比例尺:

p = figure(
    tools="pan,box_zoom,reset,previewsave",
    y_axis_type="log", y_range=[0.001, 10**22], title="log axis example",
    x_axis_label='sections', y_axis_label='particles'
)

然而,我无法弄清楚如何将此应用于高级图表,例如Bokeh.charts.Bar。总的来说,我在理解Chartfigure之间的关系方面遇到了很多问题。有人可以指向一些相关文档或解释如何修改仅通过图形公开的内容并使其影响我的图表吗?

1个回答

3
我将在本周更新描述不同Bokeh API的文档,但目前为止,按级别递增,以下是三种Bokeh API:
  • models接口:最低级别的API,基本序列化层,必须手动组合所有内容。
  • glyphs接口(bokeh.plotting):中级API,可轻松创建以视觉标志为中心、属性与数据相关联的图表/图形。
  • charts接口(bokeh.charts):高级别API,用于预制/构想统计图表,例如"BoxPlot"和"Histogram"。
  • figure和各种图表函数之间没有特定关系,除了它们都会产生Plot的子类作为输出。
    我不确定当前是否可以在"charts"界面的Bar plot中添加对数轴(这将是一个合理的功能)。然而,使用中间的"glyphs"接口使用rectquad标志手动制作箱线图非常简单。以下是一个快速示例:
    from bokeh.plotting import figure, output_file, show
    
    output_file("bars.html")
    
    p = figure(title="log bar example", y_axis_type="log")
    
    p.quad(
        bottom=0, top=[10**5, 10**8, 10**3], 
        left=[0, 2, 4], right=[1,3,5]
    )
    
    show(p)  
    

    我该如何使用这些参数:left=[0, 4, 2], right=[1,5,3]来绘制你的代码呢?所以我希望x轴不要排序。在你的代码中,我希望最高值(10**8)是最后一个。谢谢! - ragesz
    你可以以任何顺序提供值。你已经在问题中写出了答案。 - bigreddot
    好的,你是对的!(我表达不够清楚...)我的问题是,我在x轴上有(数字)ID,我想要一个排序的条形图,所以让我们说my_value=15ID=0my_value=10ID=2my_value=5ID=1。所以我希望x轴看起来像这样:0-2-1,y轴看起来像这样:15-10-5。这可能吗? - ragesz
    1
    所以在 Bar 中,第二个参数是 字符串列表,因此 x 轴的值不会被 bokeh 排序。(如果我想要排序,我可以对数据框进行排序。)但是在 quad 中,leftright 参数是浮点数列表,因此它们会自动排序。我该如何指定不对这些值进行排序,让 bokeh 按照我指定的顺序显示我的值。或者我该如何指定分类 x 轴类型?谢谢! - ragesz
    请参见 https://github.com/bokeh/bokeh/issues/7369 我相信我已经发现了一个在 bokeh 0.12 中引入的 bug,导致您对这个问题的答案不再起作用(没有显示任何条形图)。 - Russell Burdt
    目前在对数坐标轴上,必须避免使用数据坐标为零的情况。设置一个非常小的值,例如 bottom=1e-10,是目前的解决方法。 - bigreddot

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