Python 3.x 如何使用货币格式化bokeh xaxis记号

Python 3.x 如何使用货币格式化bokeh xaxis记号,python-3.x,bokeh,Python 3.x,Bokeh,我正在制作一个juypter笔记本,制作一个项目符号图来比较两个值。绘图呈现,但我想格式化xaxis标记以显示货币。 这就是我目前所拥有的 project = "Rocket" targetspend = 15000 spend2date = 16600 data = [(project, targetspend, spend2date)] from bokeh.io import show, output_notebook from bokeh.plotting import figure

我正在制作一个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)
project=“火箭”
目标支出=15000
spend2date=16600
数据=[(项目、目标支出、支出日期)]
从bokeh.io导入显示,输出
从bokeh.plotting导入图形
def make_bokeh_spend_bullet(数据):
输出_笔记本()
如果len(数据)==1:
ph=135
elif len(数据)>1和len(数据)<3:
ph=165
其他:
ph=(6*len(数据)*10)
如果数据[0][2]<数据[0][1]*2:
性能=数据[0][2]
限额=[0,数据[0][1],数据[0][1]*2]
其他:
性能=数据[0][2]
限制=[0,数据[0][1],数据[0][2]]
标签=[“正常”、“超出预算”,]
cats=[x[0]表示数据中的x]
p=图(title=“项目支出”,绘图高度=ph,绘图宽度=600,y范围=猫)
p、 x_range.range_padding=0
p、 grid.grid\u line\u color=无
p、 xaxis[0]。ticker.num\u minor\u ticks=0
#p、 xaxis[0]。ticker.format(“$0,0”)
对于左、右、zip中的颜色(限制[:-1]、限制[1]、或D3[:-1]):
p、 hbar(y=猫,左=左,右=右,高度=0.8,颜色=颜色)
对于数据中的x:
如果x[2]>x[1]:
p、 hbar(y=cats,左=0,右=perf,高=0.3,color=“firebrick”)
其他:
p、 hbar(y=cats,左=0,右=perf,高=0.3,color=“gray”)
comp=[x[1]表示数据中的x]
p、 段(x0=comp,y0=[(x,-0.5)表示猫的x],x1=comp,
y1=[(x,0.5)表示猫的x],color=“黑色”,线宽=2)
对于开始,使用zip标签(限制[:-1],标签):
p、 添加布局(标签(x=start,y=0,text=Label,text\u font\u size=“10pt”,
文本(颜色=黑色,y_偏移量=5,x_偏移量=15))
回归演出(p)
输出_笔记本()
p=制造成本支出项目符号(数据)


我阅读了关于类格式化程序(**kwargs)的文章,但不清楚如何在我的图形中使用此格式选项

代码只需要多一点帮助

from bokeh.models import Label, Title, 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 €")

此代码为bokeh中的y轴提供了1000种格式:


p.yaxis[0].formatter=numerictickformatter(format=“0,0”)
With
bokeh==2.2.0
我在@PaLi's的工作中遇到了一些问题。最终我想要的是“50万美元”而不是“50万美元”。根据
PrintfTickFormatter
的建议,我完成了以下工作:

p.xaxis[0].formatter = PrintfTickFormatter(format="$%ik")

我发现了诀窍……我不断地结结巴巴地浏览文档并找到解决方案。1.添加另一个导入,如:from bokeh.models导入DigitalTickFormatter,然后更新xaxis分配以使用导入的格式化程序,如:p.xaxis[0]。formatter=DigitalTickFormatter(format=“$0”),该格式为我提供了所需的输出。如果你和我一样,因为需要使用欧元符号格式化你的记号而在这里登陆,这对我来说非常有用
plot.yaxis.formatter=PrintfTickFormatter(format=“€%s”)
这实际上不适用于我的
bokeh
版本2.0。