我用的是Bokeh的日期时间轴。在Bokeh数据源中,我有numpy日期时间格式的x,其他的是y数字。我正在寻找一种方法来显示x datetimx轴的标签就在点的正下方。我希望Bokeh显示我通过数据源提供的精确日期时间,而不是某种近似值!例如,我提供5:15:00,它在相关点之前的某个地方显示5:00:00,我计划每1小时将数据流传输到图表中,每次都要显示5个点。因此,我需要5个日期时间标签。我怎么能做到呢?我试过p.yaxis[0].ticker.desired_num_ticks = 5
,但没用。Bokeh仍然显示任意数量的滴答声!以下是我的代码和结果:
import numpy as np
from bokeh.models.sources import ColumnDataSource
from bokeh.plotting import figure
from bokeh.io import show
from bokeh.palettes import Category10
p = figure(x_axis_type="datetime", plot_width=800, plot_height=500)
data = {'x':
[np.datetime64('2019-01-26T03:15:10'),
np.datetime64('2019-01-26T04:15:10'),
np.datetime64('2019-01-26T05:15:10'),
np.datetime64('2019-01-26T06:15:10'),
np.datetime64('2019-01-26T07:15:10')],
'A': [10,25,15,55,40],
'B': [60,50,80,65,120],}
source = ColumnDataSource(data=data)
cl = Category10[3][1:]
r11 = p.line(source=source, x='x', y='A', color=cl[0], line_width=3)
r12 = p.line(source=source, x='x', y='B', color=cl[1], line_width=3)
p.xaxis.formatter=DatetimeTickFormatter(
seconds=["%H:%M:%S"],
minsec=["%H:%M:%S"],
minutes=["%H:%M:%S"],
hourmin=["%H:%M:%S"],
hours=["%H:%M:%S"],
days=["%H:%M:%S"],
months=["%H:%M:%S"],
years=["%H:%M:%S"],
)
p.y_range.start = -100
p.x_range.range_padding = 0.1
p.yaxis[0].ticker.desired_num_ticks = 5
p.xaxis.major_label_orientation = math.pi/2
show(p)
结果如下:
如文件所述,} ,这可以通过普通列表设置为方便:
num_desired_ticks
只是一个建议。如果您希望在不更改的特定位置使用记号,则可以使用^{对于datetimes,您将传递自epoch以来的毫秒值。在
如果您想要一个固定的刻度数,但是位置可能会改变(例如,因为范围可能会改变),那么没有内置的东西来做这件事。{a2}你可以。在
相关问题 更多 >
编程相关推荐