Matplotlib-为不确定数量的绘图创建一个带有CheckButton图例的图形



我知道如何使用此处的方法为一系列CheckButtons的图形创建图例:https://matplotlib.org/3.1.1/gallery/widgets/check_buttons.html

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
t = np.arange(0.0, 2.0, 0.01)
s0 = np.sin(2*np.pi*t)
s1 = np.sin(4*np.pi*t)
s2 = np.sin(6*np.pi*t)
fig, ax = plt.subplots()
l0, = ax.plot(t, s0, visible=False, lw=2, color='k', label='2 Hz')
l1, = ax.plot(t, s1, lw=2, color='r', label='4 Hz')
l2, = ax.plot(t, s2, lw=2, color='g', label='6 Hz')
plt.subplots_adjust(left=0.2)
lines = [l0, l1, l2]
# Make checkbuttons with all plotted lines with correct visibility
rax = plt.axes([0.05, 0.4, 0.1, 0.15])
labels = [str(line.get_label()) for line in lines]
visibility = [line.get_visible() for line in lines]
check = CheckButtons(rax, labels, visibility)

def func(label):
index = labels.index(label)
lines[index].set_visible(not lines[index].get_visible())
plt.draw()
check.on_clicked(func)
plt.show()

我的特殊问题是,随着我们测试更多样本,大量的图表将不断增长。如何构建我的代码,以便在运行或更新代码时,在所附代码中被称为的列表可以不断地添加新的plt.subplots条目?

感谢

IIUC,您可以执行类似的操作,并创建一个返回行句柄的函数。然后使用append来更新列表。随着子图的增长,调用addplotlines自定义函数来创建附加句柄。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
t = np.arange(0.0, 2.0, 0.01)
s0 = np.sin(2*np.pi*t)
s1 = np.sin(4*np.pi*t)
s2 = np.sin(6*np.pi*t)
fig, ax = plt.subplots()
def addplotlines(t,s, color, label, visible=True):
l, = ax.plot(t, s, visible=visible, lw=2, color=color, label=label)
plt.subplots_adjust(left=0.2)
return l
lines = []
lines.append(addplotlines(t, s0, 'k', '2 Hz', False))
lines.append(addplotlines(t, s1, 'r', '4 Hz', True))
lines.append(addplotlines(t, s2, 'g', '6 Hz', True))
# Make checkbuttons with all plotted lines with correct visibility
rax = plt.axes([0.05, 0.4, 0.1, 0.15])
labels = [str(line.get_label()) for line in lines]
visibility = [line.get_visible() for line in lines]
check = CheckButtons(rax, labels, visibility)

def func(label):
index = labels.index(label)
lines[index].set_visible(not lines[index].get_visible())
plt.draw()
check.on_clicked(func)
plt.show()

最新更新