我无法设置日期时间轴以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)
如果需要的话,将全局系统区域设置设置为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)