【问题标题】:How can I set the x-axis as datetimes on a bokeh plot?如何在散景图上将 x 轴设置为日期时间?
【发布时间】:2016-02-25 10:56:37
【问题描述】:

我在 ipython 笔记本上使用散景。

我想使用包含日期时间的 pandas DataFrame 在散景中绘制折线图:

import pandas as pd
from datetime import datetime as dt
from bokeh.io import output_notebook
from bokeh.charts import Bar, Line, show

df = pd.DataFrame(data=[1,2,3],
                  index=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)],
                  columns=['foo'])

output_notebook()
show(Line(df))

但是,散景使用微秒!为什么是这样?我该如何解决?

【问题讨论】:

    标签: python pandas ipython-notebook bokeh


    【解决方案1】:

    从散景 0.12.3 开始,您现在可以这样做:

    p = figure(..., x_axis_type='datetime', ...)
    

    【讨论】:

    • 有人请把这个答案上移!在对某些代码进行重大修订后,需要一种方法来提升更相关的答案!会将我的咆哮转移到元 :)
    • 如果这是从 pandas 列 dtype 自动推断出来的就好了。
    • 确保您的 pandas 列是 datetime 否则图表将为空白 :)
    【解决方案2】:

    这样好吗?

    import pandas as pd
    from math import pi
    from datetime import datetime as dt
    from bokeh.io import output_file
    from bokeh.charts import show
    from bokeh.models import DatetimeTickFormatter
    from bokeh.plotting import figure
    
    df = pd.DataFrame(data=[1,2,3],
                      index=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)],
                      columns=['foo'])
    p = figure(plot_width=400, plot_height=400)
    p.line(df.index, df['foo'])
    p.xaxis.formatter=DatetimeTickFormatter(
            hours=["%d %B %Y"],
            days=["%d %B %Y"],
            months=["%d %B %Y"],
            years=["%d %B %Y"],
        )
    p.xaxis.major_label_orientation = pi/4
    output_file('myplot.html')
    show(p)
    

    【讨论】:

    • 你的图表 X 轴怎么会显示 1 月 1 日两次,然后是 1 月 2 日和 3 日?
    • @A.S 即 b/c 所有可能的时间分辨率都具有相同的格式化程序。将这些更改为更具体的规模应该会起作用。
    • 这很好用,谢谢。但我想知道为什么我们需要为所有不同的时间范围(小时、日、月、年)定义格式?你有什么想法吗?
    • 这帮助我意识到,如果您希望在放大/缩小时始终使用特定格式,您应该为每个格式设置格式。起初这对我来说并不明显。
    【解决方案3】:

    FWIW,自问题首次发布以来,默认行为已更改。原始代码现在产生:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多