在matplotlib里面的subplots建立复选框,并实时返回勾选的结果
时间: 2024-12-13 17:25:59 浏览: 9
在matplotlib中,为了在子图(subplots)上建立复选框并实时获取勾选结果,通常需要借助matplotlib的`widgets`模块以及第三方库如`mplcursors`或自定义事件处理器。这里我们演示如何使用`CheckButtons`和`mplcursors`来完成这个任务。
首先,安装`mplcursors`库,如果还没安装的话:
```
pip install mplcursors
```
然后,您可以编写以下代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons, Button
import mplcursors
# 创建数据
x = np.linspace(0, 10, 400)
y1, y2 = np.sin(x), np.cos(x)
# 创建子图
fig, axs = plt.subplots(nrows=2, ncols=1, figsize=(6, 8))
# 在每个子图上创建复选框
for ax in axs.flat:
checkbtns = CheckButtons(ax, ('选择1', '选择2'))
checkbtns.on_clicked(lambda label: print(f"Selected: {label}"))
# 初始化复选框状态
for button_text in checkbtns.labels:
checkbtns.button(button_text).set_active(checkbtns.labels.index(button_text) % 2 == 0)
# 使用mplcursors监听鼠标点击事件
cursor = mplcursors.cursor(axs[0], useblit=True)
cursor.connect('add', lambda sel: sel.annotation.set_visible(True))
cursor.connect('remove', lambda sel: sel.annotation.set_visible(False))
# 可选的按钮用于清空复选框
clear_button = Button(axs[1], "Clear Selections")
clear_button.on_clicked(clear_button_clicked)
def clear_button_clicked(event):
for ax in axs.flat:
for button in ax.winfo_children():
if isinstance(button, CheckButtons):
button.clear_checkeds()
plt.show()
阅读全文