matplotlib pyqt4 pandas:多个复选框来选择要sh的绘图

2024-03-29 11:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下进口产品:

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

以及下图:

^{pr2}$

在子图0中,我从多个数据帧绘制一个列。x轴是日期轴。在

for month in months:
    alldataframes[month].Column1.plot( axarr[0] )

子批次1和2都很好,毫无疑问。在

大约有200个月,所以子批次0包含不同的200个“行”。 我想添加的功能,让用户选择哪些'行'显示,以理顺产生的子批次。 我可以显示200个复选框,每个月一个。选中1框将显示/隐藏子批次0对应的月份。 有没有更方便的接口? 如果没有,我该如何使用pyqt4或matplotlib?在

谢谢


Tags: importnumpypandasmatplotlibuseasdisplaynp
1条回答
网友
1楼 · 发布于 2024-03-29 11:59:57

您可以将matplotlib图形嵌入到pyqt图形用户界面中,但是它有点复杂,对于您的情况,您可以向exist图形添加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:

enter image description here

相关问题 更多 >