ボケに表示する特定の目盛りを指定する方法を理解しましたが、私の質問は、表示する位置に対して特定のラベルを割り当てる方法があるかどうかです。だから例えば
plot.xaxis[0].ticker=FixedTicker(ticks=[0,1])
x軸のラベルは0と1にのみ表示されますが、0と1を表示する代わりにApple and Orange。
plot.xaxis[0].ticker=FixedTicker(ticks=[0,1], labels=['Apple', 'Orange'])
ヒストグラムは、プロットしているデータに対して機能しません。とにかく、このようなボケでカスタムラベルを使用することはありますか?
より最近のバージョンのボケ(0.12.14
程度)これはさらに簡単です。固定ティックは単に「ティッカー」値として直接渡すことができ、メジャーラベルのオーバーライドを提供して、特定の値のカスタムラベルを明示的に提供できます。
from bokeh.io import output_file, show
from bokeh.plotting import figure
p = figure()
p.circle(x=[1,2,3], y=[4,6,5], size=20)
p.xaxis.ticker = [1, 2, 3]
p.xaxis.major_label_overrides = {1: 'A', 2: 'B', 3: 'C'}
output_file("test.html")
show(p)
注:以下の古いバージョンの回答はbokeh.charts
API、廃止されて削除された
最近のBokehリリース(例えば0.12.4
以降)、これは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)
[〜#〜] edit [〜#〜]:Bokeh 0.12.5
用に更新されましたが、他の回答でより簡単な方法も参照してください。
これは私のために働きました:
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)