与IPython笔记本小部件的散景:额外的数字apppearing

mat*_*ick 8 python ipython bokeh

单击以下代码中的"向上"按钮可生成一系列数字,而不是更新现有数字.如何更新现有数字?

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)
Run Code Online (Sandbox Code Playgroud)

Fra*_*ter 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)
Run Code Online (Sandbox Code Playgroud)

ps 我看到这是一个旧答案。如果您同时找到了其他解决方案,请告诉我。