【问题标题】:Getting correct intervals on datetime x-axis in Bokeh在散景中获取日期时间 x 轴上的正确间隔
【发布时间】:2018-07-11 12:54:31
【问题描述】:

我有下面的代码来绘制堆积条形图。应该如何正确处理 dates 列表中的日期时间格式和 x 轴以获得对应于线性时间的 x 刻度之间的间距?

dates = ['2018-01-25 13:04:59',
 '2018-01-26 06:16:23',
 '2018-01-26 11:03:12',
 '2018-01-26 14:10:33']

animals = ["pig", "cow", "ape"]

colors = ["#c9d9d3", "#718dbf", "#e84d60"]

data = {'dates' : dates,
        'pig'   : [2, 1, 4, 3],
        'cow'   : [5, 3, 4, 2],
        'ape'   : [3, 2, 4, 4]}

source = ColumnDataSource(data=data)

p = figure(x_range=dates, plot_height=350)

p.vbar_stack(animals, x='dates', width=0.9, color=colors, source=source,
             legend=[value(x) for x in animals])

【问题讨论】:

  • 完全不清楚你想要完成什么。我不能告诉例如如果您只想以不同方式格式化现有刻度,或者您想要完全不同的刻度位置。 “线性时间”也没有意义或描述性,在这种情况下是什么意思?
  • 我希望 x 轴在天/小时/分钟/秒之间有一个均匀的间距,而不是为 dates 中的每个现有时间戳设置一个 xtick,并绘制 @987654324 的数据@在x上的对应位置上。

标签: python plot bokeh


【解决方案1】:

喂,

如果我理解正确的话,这实际上并不难实现:

您需要做的第一件事是将时间戳转换为您可以绘制的内容,因此第一个时间戳可能是 0,下一个时间戳应该是从那时起的秒数,依此类推。为此,您可以将其转换为日期时间以在 Python 中使用:

import datetime
def conv_time(time):
   return(datetime.datetime.strptime(time , '%Y-%m-%d %H:%M:%S'))

有了这个,您可以将时间列表转换为日期时间:

dates = ['2018-01-25 13:04:59', '2018-01-26 06:16:23',
         '2018-01-26 11:03:12', '2018-01-26 14:10:33']
dates = [conv_time(i) for i in dates]

并计算距离第一个时间戳的秒数:

dates = [conv_time(i) for i in dates]
start = dates[0]
seconds = [(i - start).total_seconds() for i in dates]

导致:

[0.0, 61884.0, 79093.0, 90334.0]

您可以在轴上绘图。 (或者,您也可以使用分钟或小时。

干杯, 塞巴斯蒂安

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多