我可以将情节中的代码更改为自定义文本代码吗?

时间:2016-11-06 18:55:23

标签: python bokeh

我正在尝试更改绘图上的x轴以获取序数文本值,并且我很难找到解决方法。以下是我的目标:我希望向退休人员展示2项建议修订的政府计划,这些退休人员一生中期收入为2万美元和5万美元。

所以,我有4个IRR:2个用于20 000 $,2个用于50 000 $。有点棘手的是我没有精确的x坐标;相反,我使用标称x坐标来构建我的直方图箱(使用.quad()方法)。

然后,使用FixedTicker类,我只有2个代码显示:位于描述每个收入类别的区间之间的代码。在这一点上,我正在做这个希望我可以将这些固定的代码更改为其他一些自定义代码(可能使用dict?),但我真的不知道。

我在这里猜测,所以也许我对这个FixedTicker策略完全错了。有没有办法修改代码?如果没有,还有其他办法吗?

我试图在x轴上使用类别,但问题是我没有像category这样的对:value,它更像是category:(value,value)。

这是我的代码:

from bokeh.io import show, output_notebook
from bokeh.plotting import figure
from bokeh.models import FixedTicker

output_notebook()

irr_fed  = [4.24, 3.04]
irr_prov = [2.59, 2.83]

plot = figure(title="Internal Rates of Return: Federal vs. Provincial",
       y_range=(0,5), x_range=(0,12))

plot.quad(top=[irr_fed[0], irr_prov[0], irr_fed[1], irr_prov[1]], bottom=0,
          left=[1,3.5,7,9.5], right=[2.5,5,8.5,11])

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

show(plot)

我会展示我到这里的情节,但我还不能发布图片,因为我是新来的,而且我没有足够的声誉。如果你想看到它,代码在Notebook中工作正常。

1 个答案:

答案 0 :(得分:2)

提取TickerTickeFormatter之间的区别可能很有用。前者根据绘图范围的实际startend选择 where 来设置刻度。后者控制这些刻度的显示方式。听起来你想控制刻度线的外观比什么都重要,即你想以某种方式显示一些标准化的坐标。这表明您希望自定义TickFormatter格式化固定的刻度。

特别是,您可以查看FuncTickFormatter,它允许您提供JS的一行或一小段,以便随意控制刻度的格式。这是一个例子:

from bokeh.models import FuncTickFormatter, FixedTicker
from bokeh.plotting import figure, show, output_file

output_file("formatter.html")

p = figure(plot_width=500, plot_height=500, x_range=(0,10))
p.circle([3, 9], [4, 8], size=30)

p.xaxis.ticker=FixedTicker(ticks=[3, 9])
p.xaxis.formatter = FuncTickFormatter(code="""
    var mapping = {3: "$20 000", 9: "$50 000"};
    return mapping[tick];
""")

show(p)

生成此图片:

enter image description here

根据您的需要,您可能希望将Grid自动收报机设置为相同的固定自动收报机(以便网格线与刻度线匹配)或仅禁用x-grid。