Я работаю над записной книжкой Juypter, чтобы сделать маркированный график для сравнения двух значений. Сюжет отображается, но я хотел бы отформатировать тикеры xaxis, чтобы отобразить валюту. Это то, что у меня есть ...
project = "Rocket"
targetspend = 15000
spend2date = 16600
data = [(project, targetspend, spend2date)]
from bokeh.io import show, output_notebook
from bokeh.plotting import figure
def make_bokeh_spend_bullet(data):
output_notebook()
if len(data) ==1:
ph = 135
elif len(data) >1 and len(data) < 3:
ph =165
else:
ph = ( 6 * len(data) * 10)
if data[0][2] < data[0][1] * 2:
perf = data[0][2]
limits = [0, data[0][1], data[0][1] *2]
else:
perf = data[0][2]
limits = [0, data[0][1], data[0][2]]
labels = ["OK", "Over budget", ]
cats = [x[0] for x in data]
p=figure(title = "Project Spend", plot_height=ph, plot_width=600, y_range=cats)
p.x_range.range_padding = 0
p.grid.grid_line_color = None
p.xaxis[0].ticker.num_minor_ticks = 0
#p.xaxis[0].ticker.format('$0,0')
for left, right, color in zip(limits[:-1], limits[1:], OrRd3[::-1]):
p.hbar(y=cats, left=left, right=right, height=0.8, color=color)
for x in data:
if x[2] > x[1]:
p.hbar(y=cats, left=0, right=perf, height=0.3, color = "firebrick")
else:
p.hbar(y=cats, left=0, right=perf, height=0.3, color = "gray")
comp = [x[1] for x in data]
p.segment(x0=comp, y0=[(x, -0.5) for x in cats], x1=comp,
y1=[(x, 0.5) for x in cats], color = "black", line_width=2)
for start, label in zip(limits[:-1], labels):
p.add_layout(Label(x=start, y=0, text=label, text_font_size = "10pt",
text_color='black', y_offset=5, x_offset=15))
return show(p)
output_notebook()
p = make_bokeh_spend_bullet(data)
Я прочитал из документация по боке о классе NumeralTickFormatter (** kwargs), но неясно, как использовать этот параметр формата для моего графика.
Я все время спотыкаюсь о документах и нахожу решение. 1. добавьте еще один импорт, как в: from bokeh.models import NumeralTickFormatter, затем обновите назначение xaxis, чтобы использовать импортированное средство форматирования, как в: p.xaxis [0] .formatter = NumeralTickFormatter (format = "$ 0") Это дало мне желаемый результат .





Вы не поверите, но похоже, что это работает только для доллара США. Я не мог заставить его работать с символом евро-валюты. Есть какая-то особенная хитрость?
Например, работает следующий код:
plot.handles['yaxis'].formatter = NumeralTickFormatter(format = "0,0 $")
в то время как этот не производит никаких символов валюты:
plot.handles['yaxis'].formatter = NumeralTickFormatter(format = "0,0 €")
Если вы похожи на меня, и вы приземлились здесь, потому что вам нужно было отформатировать свои галочки с символом евро, это разбудило меня plot.yaxis.formatter = PrintfTickFormatter(format = "€ %s")
На самом деле это не сработало для меня с v2.2.0 bokeh.
Этот код дает тысячный формат оси y в боке:
p.yaxis[0].formatter = NumeralTickFormatter(format = "0,0")
С bokeh==2.2.0 у меня возникли некоторые проблемы с тем, чтобы @ PaLi заработал. В конечном итоге мне нужно было что-то вроде: «500 тысяч долларов» вместо «500 тысяч долларов». Используя предложение PrintfTickFormatter, я получил следующее:
p.xaxis[0].formatter = PrintfTickFormatter(format = "$%ik")
Я нашел уловку ....