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

Can I change tickers in a plot to custom text tickers?

我正在尝试更改绘图上的 x 轴以获得序号文本值,但我很难找到解决方法。这是我的目标:我想展示针对一生中等收入分别为 20 000 美元和 50 000 美元的退休人员的政府计划的 2 项拟议修改的 IRR。

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

然后,使用 FixedTicker class,我只显示了 2 个代码:位于描述每个收入类别的容器之间的代码。在这一点上,我这样做是希望我可以将这些固定代码更改为其他一些自定义代码(也许使用字典?),但我真的不知道。

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

我尝试在 x 轴上使用类别,但问题是我没有像 category: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中运行良好。

区分 TickerTickeFormatter 可能很有用。前者根据绘图范围的实际startend选择在哪里放置刻度。后者控制这些刻度的显示方式。听起来您想控制刻度的 外观 比其他任何事情都重要,即您想以某种方式显示一些标准化坐标。这表明您需要自定义 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: " 000", 9: " 000"};
    return mapping[tick];
""")

show(p)

生成此图像的对象:

根据您的需要,您可能希望将 Grid 代码设置为相同的固定代码(以便网格线与刻度相匹配)或只是禁用 x-grid。