如何在bokeh中设置日期时间轴的语言?

时间:2018-10-08 09:54:16

标签: python localization locale bokeh

我无法设置日期时间轴以bokeh格式设置的语言。根据{{​​3}},DatetimeTickFormatter产生时间刻度“根据当前语言环境” 。但是,无论我在Python中设置的哪种语言环境,都会得到一个用英语格式化的绘图:

# jupyter notebook
import locale
locale.setlocale(locale.LC_ALL, 'pl')

import random
from datetime import datetime, date
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models.formatters import DatetimeTickFormatter

output_notebook()

x_values = [datetime(2018, i, 1) for i in range(6, 13)]
y_values = [random.normalvariate(0, 1) for i in range(6, 13)]

p = figure(plot_width=600, plot_height=300, 
           x_axis_type='datetime', title="test", 
           x_axis_label='x test', y_axis_label='y test')

p.line(
    x=x_values, 
    y=y_values
)

p.xaxis.formatter = DatetimeTickFormatter(months = '%B')

show(p)

documentation

如果需要的话,将全局系统区域设置设置为en-US

PS C:\Users\ppatrzyk> GET-WinSystemLocale

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

我正在处理多种语言的地块,所以我需要即时更改locale 。通过locale.setlocale进行此操作对我来说效果很好,无论是将打印日期打印到控制台还是使用matplotlib。如何在bokeh中进行设置,以便正确格式化日期?

编辑

我得到的最佳解决方法是将日期绘制为数字轴(unix时间戳记),然后使用major_label_overrides用从python的datetime.strftime()获得的格式正确的日期替换刻度。但是,在这种情况下,缩放数据点之间的刻度不起作用,因此这远不是令人满意的解决方案

x_values = [datetime(2018, i, 1) for i in range(6, 13)]
y_values = [random.normalvariate(0, 1) for i in range(6, 13)]

x_values_timestamp = [int(el.timestamp()) for el in x_values]
x_values_labels = [el.strftime('%B') for el in x_values]

p = figure(plot_width=600, plot_height=300, title="test", 
           x_axis_label='x test', y_axis_label='y test')

p.xaxis.ticker = x_values_timestamp
p.xaxis.major_label_overrides = dict(zip(x_values_timestamp, x_values_labels))

p.line(
    x=x_values_timestamp, 
    y=y_values
)

show(p)

enter image description here

0 个答案:

没有答案