2016-05-11 16 views
6

Bokehに表示する特定のティックをどのように指定するのか理解していますが、私の質問は、特定のラベルを表示して位置に対して割り当てる方法があるかどうかです。ですから、例えばBokehのティックにカスタムラベルを使用するにはどうすればよいですか?

plot.xaxis[0].ticker=FixedTicker(ticks=[0,1]) 

のみ0と1でx軸のラベルを表示し、代わりに0と1を示すの私は、アップルとオレンジを見せたかったらどうだろう。何かのように

plot.xaxis[0].ticker=FixedTicker(ticks=[0,1], labels=['Apple', 'Orange']) 

私がプロットしているデータのヒストグラムは機能しません。このようなBokehでカスタムラベルを使用する方法はありますか?

答えて

3

EDIT:Bokeh 0.12.5で更新されましたが、他の回答でも簡単な方法があります。

これは私の仕事:最近ボケリリース(例えば0.12.4以降)のよう

import pandas as pd 
from bokeh.charts import Bar, output_file, show 
from bokeh.models import TickFormatter 
from bokeh.core.properties import Dict, Int, String 

class FixedTickFormatter(TickFormatter): 
    """ 
    Class used to allow custom axis tick labels on a bokeh chart 
    Extends bokeh.model.formatters.TickFormatte 
    """ 

    JS_CODE = """ 
     import {Model} from "model" 
     import * as p from "core/properties" 

     export class FixedTickFormatter extends Model 
      type: 'FixedTickFormatter' 
      doFormat: (ticks) -> 
      labels = @get("labels") 
      return (labels[tick] ? "" for tick in ticks) 
      @define { 
      labels: [ p.Any ] 
      } 
    """ 

    labels = Dict(Int, String, help=""" 
    A mapping of integer ticks values to their labels. 
    """) 

    __implementation__ = JS_CODE 

skills_list = ['cheese making', 'squanching', 'leaving harsh criticisms'] 
pct_counts = [25, 40, 1] 
df = pd.DataFrame({'skill':skills_list, 'pct jobs with skill':pct_counts}) 
p = Bar(df, 'index', values='pct jobs with skill', title="Top skills for ___ jobs", legend=False) 
label_dict = {} 
for i, s in enumerate(skills_list): 
    label_dict[i] = s 

p.xaxis[0].formatter = FixedTickFormatter(labels=label_dict) 
output_file("bar.html") 
show(p) 

result of code

+0

'スキルリストとpct_countsが作成されましたが、ここには表示されません。 – dopatraman

+0

ハ、それはあなたがそれを投票した理由なのですか?あなたはコードを編集し、代わりに建設的であった可能性があります。 – wordsforthewise

+0

修正しました。あなたのダウンワードを元に戻すことはできますか? – wordsforthewise

8

を、これはFuncTickFormatterを使用して達成するために、今非常に簡単です:

import pandas as pd 
from bokeh.charts import Bar, output_file, show 
from bokeh.models import FuncTickFormatter 

skills_list = ['cheese making', 'squanching', 'leaving harsh criticisms'] 
pct_counts = [25, 40, 1] 
df = pd.DataFrame({'skill':skills_list, 'pct jobs with skill':pct_counts}) 
p = Bar(df, 'index', values='pct jobs with skill', title="Top skills for ___ jobs", legend=False) 
label_dict = {} 
for i, s in enumerate(skills_list): 
    label_dict[i] = s 

p.xaxis.formatter = FuncTickFormatter(code=""" 
    var labels = %s; 
    return labels[tick]; 
""" % label_dict) 

output_file("bar.html") 
show(p) 
+0

便利ですが、ブラウザに空白のページしか表示されません。 – EddyTheB

+0

Bokehの '0.12.4'と' 0.12.5'を使って私のために働いてください。その理由を調べるためにはもっと多くの情報が必要です。 – bigreddot

+0

私は0.12.2でしたが、アップグレードで修正されました:-) – EddyTheB

関連する問題