编辑:感谢@ tmwilson26我能够使用javascript code
修复它(请参见下面的评论)。但是,我仍然想知道是否有使用from_py_func
的解决方案。
我正在使用Bokeh,并努力使用FuncTickFormatter
格式化轴。
具体来说,我正在使用FuncTickFormatter.from_py_func
函数。
我下面的代码示例不产生任何结果(但也没有错误消息)。
from bokeh.models import ColumnDataSource,Label, FuncTickFormatter,DatetimeTickFormatter,NumeralTickFormatter, Select, FixedTicker, Slider,TableColumn,DatePicker, DataTable, TextInput, HoverTool,Range1d,BoxZoomTool, ResetTool
from bokeh.plotting import figure, output_file, show, curdoc
from bokeh.layouts import row, column, widgetbox, layout
from bokeh.io import output_notebook, push_notebook, show
output_notebook()
x = np.arange(10)
y = [random.uniform(0,5000) for el in x]
xfactors = list("abcdefghi")
yrange = Range1d(0,5000)
p = figure(x_range = xfactors, y_range = yrange,y_minor_ticks = 10)
p.circle(x,y, size = 14, line_color = "grey" , fill_color = "lightblue", fill_alpha = 0.2)
def ticker():
a = '{:0,.0f}'.format(tick).replace(",", "X").replace(".", ",").replace("X", ".")
return a
# If I comment below line out, code is running just fine
p.yaxis.formatter = FuncTickFormatter.from_py_func(ticker)
show(p)
如果我对FuncTickFormatter行进行注释,则代码运行正常。如果在此代码之外使用定义的函数
ticker
,它也可以使用。任何关于我做错事的建议都将非常有帮助。
谢谢!
最佳答案
如果from_py_func
给您带来麻烦,请尝试使用纯Javascript。下面是一个示例:
p.yaxis.formatter = FuncTickFormatter(code="""
function(tick){
function markCommas(x) {
return x.toFixed(1).replace(/\B(?=(\d{3})+(?!\d))/g, "X");
}
return markCommas(tick).replace('.',',').replace("X",'.')
}
""")
在某些文档中,可能不需要使用
tick
作为输入参数来定义一个函数,因此您可能需要删除该外部函数,但是在我的版本0.12.2
上,这可以产生您所要求的数字例如5.000,0在较新的版本中,它可能看起来像这样:
p.yaxis.formatter = FuncTickFormatter(code="""
function markCommas(x) {
return x.toFixed(1).replace(/\B(?=(\d{3})+(?!\d))/g, "X");
}
return markCommas(tick).replace('.',',').replace("X",'.')
""")
如果子功能不起作用,则返回单行返回语句:
p.yaxis.formatter = FuncTickFormatter(code="""
return tick.toFixed(1).replace(/\B(?=(\d{3})+(?!\d))/g, "X").replace('.',',').replace("X",'.');
""")
关于python - Python/散景-FuncTickFormatter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42376878/