【问题标题】:Bokeh skip tick labels for categorical data散景跳过分类数据的刻度标签
【发布时间】:2018-01-25 07:12:45
【问题描述】:

我使用的是 Bokeh 版本 0.12.13。 我有一个混合的数字和分类数据。我在 x 轴上只有一个分类数据,其余的是数字。我将所有内容都转换为分类数据以进行绘图(可能不是实现目标的最简单方法)。现在我的 x 轴刻度标签比我需要的要密集得多。我想每隔 10 个值将它们隔开,所以标签是 10,20,...,90,rest

这是我迄今为止尝试过的:

import pandas as pd
from bokeh.io import show
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.models.tickers import FixedTicker

# create mock data
n = [str(i) for i in np.arange(1,100)]
n.append('rest')
t = pd.DataFrame([n,list(np.random.randint(25,size=100))]).T
t.columns = ['Number','Value']
t.loc[t['Number']==100,'Number'] = 'Rest'

source = ColumnDataSource(t)

p = figure(plot_width=800, plot_height=400, title="",
            x_range=t['Number'].tolist(),toolbar_location=None, tools="")

p.vbar(x='Number', top='Value', width=1, source=source,
       line_color="white")

#p.xaxis.ticker = FixedTicker(ticks=[i for i in range(0,100,10)])

show(p)

理想情况下,我希望网格和 x 轴标签每隔 10 个值出现一次。任何有关如何到达那里的帮助将不胜感激。

【问题讨论】:

    标签: python bokeh


    【解决方案1】:

    更简单的方法是保留数值数据并使用 xaxis.major_label_overrides。代码如下:

    import pandas as pd
    from bokeh.io import show
    from bokeh.models import ColumnDataSource
    from bokeh.plotting import figure
    from bokeh.models.tickers import FixedTicker
    
    # create mock data
    n = np.arange(1,101)
    t = pd.DataFrame([n,list(np.random.randint(25,size=100))]).T
    t.columns = ['Number','Value']
    
    source = ColumnDataSource(t)
    
    p = figure(plot_width=800, plot_height=400, title="",
                toolbar_location=None, tools="")
    
    p.vbar(x='Number', top='Value', width=1, source=source,
           line_color="white")
    
    p.xaxis.major_label_overrides = {100: 'Rest'}
    
    show(p)
    

    【讨论】:

      【解决方案2】:

      您现在可以使用 FuncTickFormatter 执行此操作(在 Bokeh 2.2.3 中):

      # This prints out only every 10th tick label
      p.axis.formatter = FuncTickFormatter(code="""
          
          if (index % 10 == 0)
          {
              return tick;
          }
          else
          {
              return "";
          }
          """)
      

      有时您可能想要这样做而不是使用数值轴和major_label_overrides,例如在热图中将内容矩形定位在正确的位置,或者如果您根本没有数字数据但仍希望轴标签中有间隙。

      【讨论】:

        猜你喜欢
        • 2018-07-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 1970-01-01
        • 2015-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多