<p>由于您使用的是Jupyter笔记本,因此您有许多不同的选择</p>
<p>一些可视化库将具有内置的<a href="https://docs.bokeh.org/en/latest/docs/user_guide/interaction/widgets.html#dropdown" rel="nofollow noreferrer">widgets</a>供您使用,但是它们通常需要您运行服务器或提供javascript回调。对于与库无关的方法,可以使用<code>ipywidgets</code>。此库专门用于创建Jupyter笔记本中使用的小部件。文件是<a href="https://ipywidgets.readthedocs.io/en/latest/index.html" rel="nofollow noreferrer">here</a></p>
<p>要创建一个下面有静态条形图的简单下拉列表,您需要三个小部件-<code>Label</code>用于下拉列表描述,<code>Dropdown</code>和<code>Output</code><code>VBox</code>是用来布置它们的</p>
<pre><code>from ipywidgets import VBox, Label, Dropdown, Output
desc = Label("Pick a .csv to plot:")
dropdown = Dropdown(
options=['None', 'csv1', 'csv2', 'csv3'],
value='None',
disabled=False)
output = Output()
dropdown.observe(generate_plot, names="value")
VBox([desc, dropdown, output])
</code></pre>
<p><a href="https://i.stack.imgur.com/z2Mie.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/z2Mie.png" alt="enter image description here"/></a></p>
<p>关键元素是<code>generate_plot</code>函数。它必须有一个单独的参数,您可以使用它来决定小部件操作对绘图的影响。当您与下拉菜单交互时,<code>generate_plot</code>函数将被调用并传递一个带有“new”值、“old”值和其他一些内容的字典</p>
<p>这里有一个函数,用于生成具有可调整数据源的基本<code>seaborn</code>条形图。请注意,我必须包含一个显式的<code>plt.show()</code>-否则将无法渲染绘图</p>
<pre><code>def generate_plot(change):
with output:
output.clear_output() # reset the view
if change["new"] != "None":
data = pd.read_csv(...) # your custom code based on dropdown selection
sns.catplot(x="Letters", y="Numbers", kind="bar", data=data)
fig = plt.figure()
plt.show(fig)
</code></pre>
<p>如果您有许多大型.csv文件,另一件事是您可能希望实现一个缓存系统,以便将最后几个用户选择保留在内存中,并避免在每次选择时重新读取它们</p>
<p>为了更深入地了解如何使用<code>ipywidgets</code>向<code>matplotlib</code>图添加交互性,我发现这个<a href="https://kapernikov.com/ipywidgets-with-matplotlib/" rel="nofollow noreferrer">tutorial</a>非常有用</p>