我对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'
如果有人知道,请指出我正确的方向。
谢谢和最诚挚的问候, 斯蒂芬
答案 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)
首次显示时,其轴看起来像这样:
您还可以通过在p.xaxis[0].formatter
上设置各种属性来进一步自定义日期格式化程序的方式。有关可用属性的详细信息,请参阅参考指南: