2017-02-16 1 views
1

Ich versuche mehrere Zeitreihen in der gleichen Grafik mit Bokeh zu plotten. Einige Serien haben eine andere Länge als die anderen, aber ich möchte sie anzeigen lassen.Bokeh "Quelle" mit verschiedenen Spalten Länge

An dieser Stelle habe ich die Warnung, dass alle Spalte der Quelle nicht die gleiche Länge haben, aber Bokeh scheint automatisch Größen anzupassen.

Eine andere wichtige Sache, ich muss alle 'Y' Werte der Zeitreihe in der gleichen Quelle haben, da ich einen Rückruf in JS verwende, um interaktive Handlung zu erstellen.

Der Rückruf wird:

callback = CustomJS(args=dict(source=source), code=""" 
      // data contains the source.column_names keys 
      var data = source.get('data'); 
      // f contains the name of the time series to be plotted 
      var f = cb_obj.get('value'); 

      // For each key in the source, find the lines to be plotted 
      for (i = 0; i < Object.keys(data).length; i++) { 
       curr_key = Object.keys(data)[i]; 
       // 'line' identifier is used to recognise columns of sources which represent Y values 
       if (curr_key.includes('line')) { 
        id_ = curr_key.split('_')[0]; 
        associated_save = id_.concat('_save_y'); 
        // If the time series is in the selected to be plotted, set the data to plot it 
        if (f.indexOf(curr_key) > -1) { 
         data[curr_key] = data[associated_save] 
        } else { // else, fixe to nan to erase it 
         data[curr_key] = 'nan' 
        } 
       } 

      } 

      source.trigger('change'); 
     """) 

Der Algorithmus in einer Schleife über die COLUMN_NAMES der Quelle, um die Serie zu plotten/oder unplot die entsprechende Zeit ist.

Kann ich hier eine Quellenliste angeben? args=dict(source=source)? Soll ich die Warnung ignorieren, aber meine Serien werden geschnitten oder sollte ich sie auf andere Weise verarbeiten?

Die Handlung funktioniert recht gut, aber ich versuche, um die Warnung zu entfernen ...

Vielen Dank!

Antwort

1

Ich sehe vor allem zwei Möglichkeiten:

  • Ihre Daten auf die gleiche Länge Resampling, aber das ist wahrscheinlich nicht so einfach zu tun und hängt sehr stark von den Eigenschaften Ihrer Daten. (Wenn Interpolation oder Downsampling möglich ist usw.)

  • Sie können mehrere Linien() (oder was auch immer Glyphe) Plots zu einer Figur hinzufügen. Bedeutet, dass Sie Ihre Daten in mehreren Datenrahmen mit derselben Länge gruppieren. Dann wird Ihr Javascript ein wenig Refactoring benötigen. Sie können über die Renderer, die Linien sind, iterieren und dort haben Sie einen Verweis auf die entsprechende Quelle. Oder Sie können den Renderer in Javascript deaktivieren (um das Diagramm auszublenden)

+0

Ich habe das Problem mit Down Sampling für diese Zeit gelöst. Wie Sie erwähnt haben, sind die Daten für diese Methode nicht immer angepasst. Über Ihre zweite Option erlauben mir meine JavaScript-Kenntnisse in diesen Momenten keine komplexeren Dinge. :) Aber danke für diese Antwort! – glihm

Verwandte Themen