更新散景图中的数据点标签
Update data point labels in bokeh plot
我在 ipython 笔记本中使用散景,并希望在绘图旁边有一个按钮来打开或关闭数据点的标签。我使用 IPython.html.widgets.interact
找到了 解决方案 ,但此解决方案会重置每次更新的绘图,包括缩放和填充
这是最小的工作代码示例:
from numpy.random import random
from bokeh.plotting import figure, show, output_notebook
from IPython.html.widgets import interact
def plot(label_flag):
p = figure()
N = 10
x = random(N)+2
y = random(N)+2
labels = range(N)
p.scatter(x, y)
if label_flag:
pass
p.text(x, y, labels)
output_notebook()
show(p)
interact(plot, label_flag=True)
p.s。如果在 matplotlib 中有一种简单的方法可以做到这一点,我也会再次切换回来。
通过使用 bokeh.models.ColumnDataSource
来存储和更改绘图数据,我能够实现我想要的。
需要注意的是,我发现无法使其工作 w/o 刷新 w/o 在两个不同的单元格中调用 output_notebook
两次。如果我删除两个 output_notebook
调用之一,tools
按钮的 gui 看起来会中断或更改设置也会导致情节重置。
from numpy.random import random
from bokeh.plotting import figure, show, output_notebook
from IPython.html.widgets import interact
from bokeh.models import ColumnDataSource
output_notebook()
## <-- new cell -->
p = figure()
N = 10
x_data = random(N)+2
y_data = random(N)+2
labels = range(N)
source = ColumnDataSource(
data={
'x':x_data,
'y':y_data,
'desc':labels
}
)
p.scatter('x', 'y', source=source)
p.text('x', 'y', 'desc', source=source)
output_notebook()
def update_plot(label_flag=True):
if label_flag:
source.data['desc'] = range(N)
else:
source.data['desc'] = ['']*N
show(p)
interact(update_plot, label_flag=True)
我在 ipython 笔记本中使用散景,并希望在绘图旁边有一个按钮来打开或关闭数据点的标签。我使用 IPython.html.widgets.interact
找到了 解决方案 ,但此解决方案会重置每次更新的绘图,包括缩放和填充
这是最小的工作代码示例:
from numpy.random import random
from bokeh.plotting import figure, show, output_notebook
from IPython.html.widgets import interact
def plot(label_flag):
p = figure()
N = 10
x = random(N)+2
y = random(N)+2
labels = range(N)
p.scatter(x, y)
if label_flag:
pass
p.text(x, y, labels)
output_notebook()
show(p)
interact(plot, label_flag=True)
p.s。如果在 matplotlib 中有一种简单的方法可以做到这一点,我也会再次切换回来。
通过使用 bokeh.models.ColumnDataSource
来存储和更改绘图数据,我能够实现我想要的。
需要注意的是,我发现无法使其工作 w/o 刷新 w/o 在两个不同的单元格中调用 output_notebook
两次。如果我删除两个 output_notebook
调用之一,tools
按钮的 gui 看起来会中断或更改设置也会导致情节重置。
from numpy.random import random
from bokeh.plotting import figure, show, output_notebook
from IPython.html.widgets import interact
from bokeh.models import ColumnDataSource
output_notebook()
## <-- new cell -->
p = figure()
N = 10
x_data = random(N)+2
y_data = random(N)+2
labels = range(N)
source = ColumnDataSource(
data={
'x':x_data,
'y':y_data,
'desc':labels
}
)
p.scatter('x', 'y', source=source)
p.text('x', 'y', 'desc', source=source)
output_notebook()
def update_plot(label_flag=True):
if label_flag:
source.data['desc'] = range(N)
else:
source.data['desc'] = ['']*N
show(p)
interact(update_plot, label_flag=True)