放大Python Bokeh时的动态索引

时间:2017-06-17 15:20:05

标签: python indexing bokeh

我对Bokeh很新,并尝试实现以下目标:

我有一个数据集,其中包含日期格式为dd-mm-yyyy的行。 计算日期然后绘制。 当放大时,我希望Bokeh显示个人日期(已经有效)。 当缩小时,我希望Bokeh只显示月份(或者甚至进一步缩小的几年)。正确地知道索引变得非常混乱,因为个别日期越来越近,缩小的越多。

有没有办法让Bokeh根据您放大或缩小的距离来更改索引中显示的内容?

这是我的代码:

import pandas as pd
from bokeh.charts import TimeSeries
from bokeh.io import output_file, show, gridplot

transactionssent = dict(pd.melt(df,value_vars=['datesent']).groupby('value').size())
transactionssent2 = pd.DataFrame.from_dict(transactionssent, orient= 'index')
transactionssent2.columns = ['Amount']
transactionssent2.index.rename('Date sent', inplace= True)

ts = TimeSeries(transactionssent2, x='index', y='Amount')
ts.xaxis.axis_label = 'Date sent'

如果有人知道,请指出我正确的方向。

谢谢和最诚挚的问候, 斯蒂芬

1 个答案:

答案 0 :(得分:0)

您所描述的内容已经听起来像内置日期时间轴的标准行为。所以,我的猜测是TimeSeries将您的日期视为字符串/分类值,这可以解释为什么您没有看到标准的日期时间轴缩放。

我应该补充一点,bokeh.charts(包括TimeSeries)最近被移除到一个单独的项目中,并且已知存在问题。我实际上不鼓励它在这一点上使用。幸运的是,使用bokeh.plotting API绘制时间序列也很容易,该API是稳定的,经过充分测试和记录的,并且广泛使用。

以下是一个示例:

import datetime
import numpy as np

from bokeh.io import show, output_file
from bokeh.plotting import figure

# some fake data just for this example, Pandas columns work fine too
start = datetime.datetime(2017, 1, 1)
x = np.array([start + datetime.timedelta(hours=i) for i in range(800)])
y = np.sin(np.linspace(0, 2, len(x))) + 0.05 * np.random.random(len(x))

p = figure(x_axis_type="datetime")
p.line(x, y)

output_file("stocks.html")

show(p)

首次显示时,其轴看起来像这样:

enter image description here

但放大时喜欢这样: enter image description here

您还可以通过在p.xaxis[0].formatter上设置各种属性来进一步自定义日期格式化程序的方式。有关可用属性的详细信息,请参阅参考指南:

http://bokeh.pydata.org/en/latest/docs/reference/models/formatters.html#bokeh.models.formatters.DatetimeTickFormatter