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()。我有一些不同频率的正弦波可以打开/关闭