2017-09-20 1 views
0

Ich möchte ein Streudiagramm mit Holobildern anzeigen und die Grafik alle 10 Sekunden aktualisieren. Daher habe ich eine Funktion "BokehDisplay" geschrieben, um das Streudiagramm ohne Aktualisierung zu zeichnen, dann fügte ich eine weitere Funktion "DynamicDisplay" hinzu, um das Streudiagramm alle 10 Sekunden zu aktualisieren. Das Streudiagramm erschien jedoch nur, wenn ich die erste Funktion ausführte, aber nicht, wenn ich die zweite Funktion ausführte. Alle Hinweise würden sehr geschätzt werden! Vielen Dank!holoviews plot nicht gezeigt

from datetime import datetime 
import holoviews as hv 
import numpy as np 
import time 
hv.extension('bokeh') 

def BokehDisplay(): 
    x, y = [], [] 
    with open("evening_commute_time.txt", "r") as f: 
     for line in f: 
      x.append(line[:19]) 
      y.append(int(line[27:29])) 
    x_time = np.array(x, dtype = np.datetime64) 
    scatter = hv.Scatter((x_time,y), kdims = ['starting time'], vdims = ['Commute Time (min)']) 
    return scatter 

def DynamicDisplay(flag): 
    while flag > 0: 
     BokehDisplay() 
     time.sleep(10) 
     flag -= 1 
+0

jlstevens beantwortete Ihre Frage unten, aber für zukünftige Referenz funktioniert der Grund BokehDisplay(), wenn er selbst in einer Jupyter Notebook Zelle verwendet wird, dass er ein HoloViews Objekt zurückgibt, und wenn etwas in einer Notebook Zelle zurückgegeben wird, zeigt Jupyter es an wenn es möglich ist. Aber für DynamicDisplay() gibt es keinen Rückgabewert, und in diesem Fall wird nichts angezeigt. –

Antwort

2

Sie benötigen aufrufbar wickeln die Scatter in einem DynamicMap zurückkehren, so können Sie sie in regelmäßigen Abständen mit dem event Verfahren aktualisieren:

import time 
from holoviews.streams import Stream 

dmap = hv.DynamicMap(BokehDisplay, streams=[Stream.define('next')()]) 
dmap # Display the DynamicMap here 

while True: # In a new notebook cell 
    time.sleep(10) 
    dmap.event() 

Hoffnung, das hilft.

+0

Hier, wenn eine Zelle in "dmap" endet, wird das Diagramm angezeigt, und die dynamische Aktualisierung wird dann von einer * separaten * Zelle behandelt, die * nicht * einen Wert zurückgibt ... –