2017-10-20 11 views
0

J'essaie de tracer trois nuages ​​de points Bokeh en ligne dans un bloc-notes Jupyter. J'ai été capable de le faire précédemment, mais après la mise à jour de Bokeh, je n'arrive pas à le faire fonctionner. Y a-t-il quelque chose que je dois faire différemment maintenant?Générer des diagrammes de dispersion bokeh en ligne dans Jupyter en utilisant une boucle for

from bokeh.plotting import figure, output_file, output_notebook, show 
output_notebook() 


x = dfList[0][1]['ValueA'] 

for i in range(0,3): 

    #Define figure 
    p = figure(plot_width=900, plot_height=600,  
      tools="pan,wheel_zoom,lasso_select,box_zoom,reset,save,undo") 

    #Add four datasets to figure 
    for t in range(4): 
     y = dfList[t][1]['ValueB'] 
     plot_data = p.circle(x,y) 

    #Display figure in notebook 
    show(p) 

Avec le code ci-dessus, seul le premier graphique s'affiche. J'ai essayé

from bokeh.plotting import reset_output 

et en ajoutant reset_output() après show(p) à chaque itération, ce qui génère des trois parcelles, mais ils sont chaque sortie dans un onglet du navigateur, ce qui est pas ce que je veux. Si j'ajoute également output_notebook() à chaque itération, plutôt que seulement dans la première cellule de mon cahier, alors je reçois seulement le premier tracé, avec le message «Chargement BokehJS ...» affiché ci-dessous pour les deux autres itérations.

Qu'est-ce que je fais mal?

Répondre

1

Si cela fonctionnait précédemment, je dirais qu'il s'agissait d'un comportement non défini non intentionnel. La fonction show a toujours eu à l'esprit que c'était en remplaçant la sortie dans les cellules de sortie suivantes, donc l'exécuter plusieurs fois dans une cellule n'a jamais été un modèle d'utilisation qui a été considéré. Quoi qu'il en soit, l'ajout de la prise en charge du support JupyterLab a nécessité divers changements dans les machines d'affichage des ordinateurs portables, et c'est probablement la raison immédiate pour laquelle vous voyez une différence. Cependant, je dirais que le comportement actuel est correct, et que devrait-on attendre à l'avenir.

La bonne façon de faire quelque chose comme ceci est de collecter les parcelles dans une mise en page d'une certaine sorte, puis montrer la mise en page:

from bokeh.layouts import column 
layout = column() 

for x in foo: 

    p = figure() 
    layout.children.append(p) 

show(layout) 
+0

Merci beaucoup pour votre aide. Cela prend beaucoup plus de sens de spécifier une mise en page. – Violet