我可以将绘图中的代码更改为自定义文本代码吗?
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中运行良好。
区分 Ticker
和 TickeFormatter
可能很有用。前者根据绘图范围的实际start
和end
选择在哪里放置刻度。后者控制这些刻度的显示方式。听起来您想控制刻度的 外观 比其他任何事情都重要,即您想以某种方式显示一些标准化坐标。这表明您需要自定义 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。
我正在尝试更改绘图上的 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中运行良好。
区分 Ticker
和 TickeFormatter
可能很有用。前者根据绘图范围的实际start
和end
选择在哪里放置刻度。后者控制这些刻度的显示方式。听起来您想控制刻度的 外观 比其他任何事情都重要,即您想以某种方式显示一些标准化坐标。这表明您需要自定义 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。