Wie mache ich Bokeh unterlassen fehlende Termine bei der Verwendung von datetime als x-Achse

Ich sehe das Candlestick-Beispiel in den Bokeh-Dokumenten an, hier gefunden:

Https://github.com/ContinuumIO/bokeh/blob/master/examples/plotting/file/candlestick.py

Und ich versuche, einen guten Weg herauszufinden, um die "Räume" in der x-Achse zu beseitigen, wo es keine Daten gibt.

Speziell für Finanzdaten wie MSFT, die im Beispiel verwendet werden, gibt es keine Daten für Wochenenden und Feiertage. Gibt es eine Möglichkeit zu sagen, Bokeh nicht zu einem leeren Raum in der Tabelle zu verlassen, wenn es keine Daten für ein Datum?

Hier ist ein Einfügen der Beispiel-Code an der oben genannten Link zur Bequemlichkeit gefunden:

from math import pi import pandas as pd from bokeh.sampledata.stocks import MSFT from bokeh.plotting import * df = pd.DataFrame(MSFT)[:50] df['date'] = pd.to_datetime(df['date']) mids = (df.open + df.close)/2 spans = abs(df.close-df.open) inc = df.close > df.open dec = df.open > df.close w = 12*60*60*1000 # half day in ms output_file("candlestick.html", title="candlestick.py example") figure(x_axis_type = "datetime", tools="pan,wheel_zoom,box_zoom,reset,previewsave", width=1000, name="candlestick") hold() segment(df.date, df.high, df.date, df.low, color='black') rect(df.date[inc], mids[inc], w, spans[inc], fill_color="#D5E1DD", line_color="black") rect(df.date[dec], mids[dec], w, spans[dec], fill_color="#F2583E", line_color="black") curplot().title = "MSFT Candlestick" xaxis().major_label_orientation = pi/4 grid().grid_line_alpha=0.3 show() # open a browser 

2 Solutions collect form web for “Wie mache ich Bokeh unterlassen fehlende Termine bei der Verwendung von datetime als x-Achse”

Bokeh hat derzeit nicht (Version 0.4.4) Unterstützung für gebrochene Achsen, obwohl es definitiv eine Funktion ist, die wir hinzufügen möchten (oder einen Pull Request auf Github für!)

UPDATE 2016-05-26:

Einige Details der BokehJS-Schnittstelle haben sich geändert. Für Bokeh 0.11 und neuer ist die __implementation__ nun:

 __implementation__ = """ _ = require "underscore" Model = require "model" p = require "core/properties" class DateGapTickFormatter extends Model type: 'DateGapTickFormatter' doFormat: (ticks) -> date_labels = @get("date_labels") return (date_labels[tick] ? "" for tick in ticks) @define { date_labels: [ p.Any ] } module.exports = Model: DateGapTickFormatter """ 

Das wird sich nicht weiter ändern.

2016-02-09

Pull-Anfrage 3314 wurde für ein Beispiel gemacht, das am 2015-12-05 funktioniert. Der ursprüngliche Code ist hier . Die Dokumentation für das Candlestick-Beispiel zeigt immer noch den gleichen Code wie das OP in der Frage hatte.

Im Folgenden als Referenz enthalten.

 from math import pi import pandas as pd from bokeh.sampledata.stocks import MSFT from bokeh.plotting import figure, show, output_file from bokeh.models.formatters import TickFormatter, String, List # In this custom TickFormatter, xaxis labels are taken from an array of date # Strings (eg ['Sep 01', 'Sep 02', ...]) passed to the date_labels property. class DateGapTickFormatter(TickFormatter): date_labels = List(String) __implementation__ = """ _ = require "underscore" HasProperties = require "common/has_properties" class DateGapTickFormatter extends HasProperties type: 'DateGapTickFormatter' format: (ticks) -> date_labels = @get("date_labels") return (date_labels[tick] ? "" for tick in ticks) module.exports = Model: DateGapTickFormatter """ df = pd.DataFrame(MSFT)[:50] # xaxis date labels used in the custom TickFormatter date_labels = [date.strftime('%b %d') for date in pd.to_datetime(df["date"])] mids = (df.open + df.close)/2 spans = abs(df.close-df.open) inc = df.close > df.open dec = df.open > df.close w = 0.5 output_file("custom_datetime_axis.html", title="custom_datetime_axis.py example") TOOLS = "pan,wheel_zoom,box_zoom,reset,save" p = figure(tools=TOOLS, plot_width=1000, toolbar_location="left") # Using the custom TickFormatter. You must always define date_labels p.xaxis[0].formatter = DateGapTickFormatter(date_labels = date_labels) # x coordinates must be integers. If for example df.index are # datetimes, you should replace them with a integer sequence p.segment(df.index, df.high, df.index, df.low, color="black") p.rect(df.index[inc], mids[inc], w, spans[inc], fill_color="#D5E1DD", line_color="black") p.rect(df.index[dec], mids[dec], w, spans[dec], fill_color="#F2583E", line_color="black") p.title = "MSFT Candlestick with custom x axis" p.xaxis.major_label_orientation = pi/4 p.grid[0].ticker.desired_num_ticks = 6 show(p) # open a browser 

Aufgrund des Codes, der den dataframe Index verwendet, müssen Ihre Daten in aufsteigender dataframe sortiert werden. Wenn Sie eine Zeitreihe in absteigender Datumsreihenfolge haben, können Sie für die Verwendung durch den obigen Code mit:

 df.sort_values(by='date', inplace=True) df.reset_index(drop=True, inplace=True) 
  • Bokeh multi_line und HoverTool
  • Wenn die Bokeh hat viele Chart, Ausgabedatei ist sehr schwer und System langsam
  • Wie man richtig eine HeatMap mit Bokeh erstellt
  • So legen Sie den Standardstil in Bokeh fest?
  • Haben Bokeh Callback eine Liste anstelle einer ColumnDataSource aktualisieren?
  • Bokeh-Plots bringen nur ein leeres Fenster
  • Passdatei Informationen aus HTML-Datei-Selektor Eingang zu python und Bokeh
  • Bokeh custom ToolTips {safe} tag zeigt nichts an
  • Holen Sie sich URL-Parameter für Bokeh-Anwendung
  • Interaktive Darstellung und Ausblenden von Zeilen in einem Bokeh-Diagramm?
  • Anzeige Höhe in Bokeh Vbar Tooltip
  • Python ist die beste Programmiersprache der Welt.