Python matplotlib pyqt4熊猫:多个复选框用于选择要显示的绘图

Python matplotlib pyqt4熊猫:多个复选框用于选择要显示的绘图,python,matplotlib,pandas,pyqt4,Python,Matplotlib,Pandas,Pyqt4,我有以下进口产品: import numpy as np import pandas as pd import matplotlib matplotlib.use('QT4Agg') import matplotlib.pyplot as plt pd.options.display.mpl_style='default' 以及下图: fig, axarr = plt.subplots(3, sharex=True) 在子图0中,我然后从多个数据帧中绘制一个列。x轴是日期轴 for mont

我有以下进口产品:

import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('QT4Agg')
import matplotlib.pyplot as plt
pd.options.display.mpl_style='default'
以及下图:

fig, axarr = plt.subplots(3, sharex=True)
在子图0中,我然后从多个数据帧中绘制一个列。x轴是日期轴

for month in months:
    alldataframes[month].Column1.plot( axarr[0] )
子地块1和2很好,这是毫无疑问的

大约有200个月,因此子地块0包含200条不同的“线”。 我想添加一个功能,让用户选择要显示的“行”来整理生成的子图。 我可能会显示200个复选框,每个月一个。选中1框可从子图0显示/隐藏相应的月份。 有没有更方便的接口? 如果没有,我如何使用pyqt4或matplotlib实现这一点


谢谢

您可以将matplotlib图形嵌入pyqt gui,但它有点复杂,对于您的情况,您可以将qt dock面板添加到现有图形中。以下是一个示例:

import numpy as np
import matplotlib
matplotlib.use("Qt4Agg") # This program works with Qt only
import pylab as pl
fig, ax1 = pl.subplots()

t = np.linspace(0, 10, 200)
lines = []
for freq in np.linspace(1, 10, 30):
    lines.extend(pl.plot(t, np.sin(2*np.pi*freq*t), label="f={}".format(freq)))

### control panel ###
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtCore import Qt

root = fig.canvas.manager.window
panel = QtGui.QWidget()
hbox = QtGui.QHBoxLayout(panel)
list_box = QtGui.QListWidget(parent = panel)
list_box.setSelectionMode(QtGui.QListWidget.MultiSelection)
list_box.setFlow(QtGui.QListView.LeftToRight)
list_box.setWrapping(True)
list_box.setGridSize(QtCore.QSize(150, 20))
for line in lines:
    list_box.addItem(line.get_label())
button_update = QtGui.QPushButton("update", panel)

def on_update(event):
    selected_labels = set([item.text() for item in list_box.selectedItems()])
    for line in lines:
        line.set_visible(line.get_label() in selected_labels)
    fig.canvas.draw()

button_update.clicked.connect(on_update)
hbox.addWidget(list_box)
hbox.addWidget(button_update)
panel.setLayout(hbox)

dock = QtGui.QDockWidget("control", root)
root.addDockWidget(Qt.BottomDockWidgetArea, dock)
dock.setWidget(panel)
######################

fig.show()
以下是gui:


我确实尝试了这段代码,但对PyQt5做了轻微修改。应用程序启动时,窗口闪烁并关闭。我什么也看不见。也许我猜到了最后缺少的部分:pl.show()。我有一些不同频率的正弦波可以打开/关闭