我有一些问题,我希望你能帮我解决它。我需要创建一个下拉小部件,我可以选择和绘制感兴趣的数据交互式绘图。我这样做的方式如下:
import plotly.graph_objects as go
import ipywidgets as widgets
import pandas as pd
df = pd.DataFrame(
{'ticker' : ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'], 'timestamp' : [1,1,1,2,2,2,3,3,3], 'val' : [10,11,12,21,22,23, 100, 200, 300]})
ddwn = widgets.Dropdown(options = df.ticker.unique())
display(ddwn)
def on_change(change):
if change['type'] == 'change' and change['name'] == 'value':
d = df[df['ticker'] == change['new']].sort_values('timestamp')
fig = go.Figure(data=go.Scatter(x=list(d.timestamp), y=list(d.val), name=change['new']))
fig.show()
ddwn.observe(on_change)
问题是一个新的图形被添加到前一个图形的下面,而不是清除当前图形。但我真的想更新图形。我试图使用Clear MatPlotLib figure in Jupyter Python notebook中的答案,但它没有帮助我。
另外,我有很多股票代码,因此我不想在每一个股票代码上都创建一个字符并使用它。
1条答案
按热度按时间kqqjbcuj1#
选项1:
此选项保留在Plotly:
(Note我发现通常使用Plotly Graph对象时,我必须从下拉列表中选择一些东西,然后它才能显示图形。在我选中第一个字母之前,它只显示空白。使用JupyterLab,它立即工作。没有空白;它立即开始显示
a
图。)选项2:
基于Matplotlib的选项:
在我的尝试中,您引用的Matplotlib示例代码并不像它对我说的那样工作。我使用了ipywidget的
interactive
,我最近看到它工作得很好,而不需要%matplotlib notebook
,它在JupyterLab中不工作。转到here并按下"启动活页夹"。一个临时的远程会话将通过MyBinder启动。要尝试Plotly,请从可用笔记本列表中选择"通过Plotly进行3D散点图"。当它打开时,使用"运行全部"来运行所有的例子。然后在底部创建一个新的单元格并粘贴到Plotly的例子中。(我不明白为什么Plotly示例在经典的Jupyter笔记本界面中显得古怪,以及/或者如果不首先在经典的Jupyter笔记本界面中运行其他代码,就不能导入什么?)
如果将Matplotlib示例粘贴到出现并运行代码的第一个笔记本中,它将工作。
要切换到JupyterLab,点击左上方的Jupyter图标,然后在弹出的会话中打开一个新的笔记本,粘贴其中的代码块并运行它。
由于会话是临时的,如果您创建了任何有用的内容,请确保将其下载到本地计算机。