单击以下代码中的“向上”按钮,将生成一系列图形,而不是更新现有图形。如何更新现有图形?
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)
最佳答案
实际上,它可以与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)
p.s.
我认为这是个老答案。如果在此期间找到其他解决方案,请告诉我。
关于python - IPython Notebook小部件: extra figures apppearing实现bokeh,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26027807/