2014-09-24 12 views
8

निम्नलिखित कोड में 'अप' बटन पर क्लिक करने से मौजूदा आंकड़े को अपडेट करने के बजाय आंकड़ों का अनुक्रम उत्पन्न होता है। एक मौजूदा आंकड़ा कैसे अपडेट करता है?आईपीथॉन नोटबुक विजेट के साथ बोके: अतिरिक्त आंकड़े

from IPython.html import widgets 
import bokeh.plotting as bp 
from IPython.display import display 
from numpy.random import randn 
bp.output_notebook() 

m = 1000 
n = 1000 
df = pandas.DataFrame(randn(m, n)).cumsum() 

bp.hold() 
bp.figure(figsize=(4, 8)) 


def doplot(i): 
    bp.line(df.index, df.icol(i), color='red', legend='here') 
    bp.show() 

class A: 
    def __init__(self): 
     self.i = 0 
     self.doplot() 
    def incr(self, something): 
     self.i += 1 
     print(self.i) 
     self.doplot() 
    def decr(self, something): 
     self.i -= 1 
     self.doplot() 
    def doplot(self): 
     doplot(self.i) 
a = A() 
button = widgets.ButtonWidget(description='up') 
button.on_click(a.incr) 
buttond = widgets.ButtonWidget(description='down') 
buttond.on_click(a.decr) 

display(button) 
display(buttond) 
+0

क्या आप एक प्लॉट के साथ एक प्लॉट चाहते हैं, जो बटन दबाए जाने पर सिंगल लाइन को अपडेट करता है? या आप संभावित रूप से कई लाइनों के साथ साजिश चाहते हैं, जो बटन धक्का दिए जाने पर नई लाइनें जोड़ता है? – bigreddot

+0

दोनों मुझे लगता है। चलो पहले उठाओ। मुख्य बात यह है कि मैं एक साजिश नहीं चाहता हूं। – mathtick

+0

ऐसा करने के लिए वैधानिक तरीका बोके सर्वर शामिल है। आप साजिश के लिए डेटा स्रोत को रोकते हैं, और उसके बाद इसे अद्यतन करते हैं और सर्वर पर धक्का देते हैं, और प्लॉट अपडेट स्वचालित रूप से होते हैं। यहां एक उदाहरण दिया गया है: https://github.com/ContinuumIO/bokeh/blob/master/examples/plotting/notebook/animated.ipynb उस ने कहा, मुझे लगता है कि एक ऐसा फ़ंक्शन जोड़ना संभव होगा जो पुनः- आईपीथॉन नोटबुक में जगह पर एक साजिश खींचती है, लेकिन मुझे विश्वास नहीं है कि यह वर्तमान में किसी भी सरल तरीके से संभव है। – bigreddot

उत्तर

0

मैं वास्तव में यह ipywidgets समारोह interact

हर इस तरह आप एक widget बोकेह साजिश के बजाय एक नया एक मौजूदा एक के साथ जोड़ दिया जा रहा है पुनः लोड किया जाएगा के साथ बातचीत के साथ काम मिल गया।

import ipywidgets 
import bokeh.plotting as bp 
from IPython.display import display 
from numpy.random import randn 
import pandas 
bp.output_notebook() 

m = 1000 
n = 1000 

df = pandas.DataFrame(randn(m, n)).cumsum() 

def create_plot(swapp_axis): 
    fig = bp.figure() 
    if swapp_axis: 
     fig.scatter(df.icol(0), df.index) 
    else: 
     fig.scatter(df.index, df.icol(0)) 
    bp.show(fig) 

swapp_axis = ipywidgets.Checkbox(
    description='swapp_axis',  
    value=False)          

ipywidgets.interact(create_plot, swapp_axis=swapp_axis) 

पश्चलेख:

यहाँ एक न्यूनतम उदाहरण, मामूली अद्यतन के साथ यह नए संस्करणों के साथ काम करने के लिए मुझे यह एक पुराना उत्तर दिखाई देता है। अगर आपको इस बीच एक और समाधान मिला, तो कृपया मुझे बताएं।

संबंधित मुद्दे