2015-11-23 9 views
15

Ich benutze Bokeh mit einem Ipython-Notebook.Wie kann ich die X-Achse als Datumswerte für ein Bokeh-Diagramm festlegen?

Ich möchte ein Liniendiagramm in Bokeh plotten eine Pandas Datenrahmen unter Verwendung von Datetimes enthält:

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)) 

jedoch Bokeh verwendet Mikrosekunden! Warum ist das? Wie repariere ich es?

bokeh plot of line

Antwort

21

ist das in Ordnung?

enter image description here

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) 
+0

Wie kommt Ihr Diagramm X-Achse zeigt 1. JANUAR zweimal, und dann 2 und 3. Januar? – multigoodverse

+0

@ A.S das ist b/c alle möglichen Zeitauflösungen haben den gleichen Formatierer. Diese zu skalieren, sollte mehr funktionieren. –

+0

Das funktioniert ganz gut, danke. Aber ich frage mich, wie wir das Format für die verschiedenen Zeitbereiche (Stunde, Tag, Monat, Jahr) definieren müssen? Hast du irgendeine Idee? – Brandt

1

FWIW hat sich das Standardverhalten, da die Frage geändert zuerst veröffentlicht wurde. Der ursprüngliche Code ergibt nun:

outcome from code

20

Ab Bokeh 0.12.3 können Sie jetzt tun:

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

Jemand in SO bitte verschieben Sie diese Antwort! Es muss eine Möglichkeit geben, Antworten zu verbessern, die nach einer größeren Überarbeitung eines Teils des Codes relevanter sind! Bewegt meine Ratte zu Meta :) – famargar

Verwandte Themen