使用其他元素更新 pandas-bokeh 图表

Posted

技术标签:

【中文标题】使用其他元素更新 pandas-bokeh 图表【英文标题】:updating pandas-bokeh charts with additional elements 【发布时间】:2021-08-28 11:58:51 【问题描述】:

我正在使用带有 pandas 和 pandas-bokeh 的 Jupyter Notebook。

我可以创建图表没问题,但是当我想添加一个元素(如 Span)时,我不知道如何避免在笔记本中显示图表的第二个副本。

有没有办法解决这些问题:

延迟绘制图形,直到我准备好显示()它? 更新现有图? 在绘制第二个图之前删除现有图?

这段代码演示了这个问题:

# spantest.ipynb

import pandas as pd
import numpy as np
import pandas_bokeh
from bokeh.models import Span
from bokeh.plotting import show

pandas_bokeh.output_notebook()

# Example linechart code from pandas-bokeh docs:
# https://github.com/PatrikHlobil/Pandas-Bokeh#lineplot

np.random.seed(42)
df = pd.DataFrame("Google": np.random.randn(1000)+0.2, 
                   "Apple": np.random.randn(1000)+0.17, 
                   index=pd.date_range('1/1/2000', periods=1000))
df = df.cumsum()
df = df + 50
fig = df.plot_bokeh(kind="line")

# So far, so good. At this point, I have one chart displayed.
# Now let's say I want to include a Span to indicate some threshold:

span = Span(location=150, dimension='width', line_color='green')
fig.add_layout(span)
show(fig)

# Now I can see the update, but it is displayed as a second copy of the chart. :-(

【问题讨论】:

【参考方案1】:

找到答案in the docs(想象一下)。

必须将选项show_figure=False 添加到图形创建行以防止它在图形创建时显示:

fig = df.plot_bokeh(kind="line", show_figure=False)

然后当我打电话给show(fig)时它只出现一次

我可以发誓我在发布问题之前曾尝试过。嗯……

【讨论】:

以上是关于使用其他元素更新 pandas-bokeh 图表的主要内容,如果未能解决你的问题,请参考以下文章

如何使 SVG 元素鼠标事件通过另一个元素冒泡?

使重叠的 d3.js 雷达图元素透明

Highcharts 动态图表(按一定时间间隔更新) PHP+MySql 示例

如果我有新的 UI 更新,如何停止预定的 UI 更新?

echarts动态改变图表的大小

图表js:更新具有两个数据集的折线图