2014-11-01 39 views
0

我有以下的進口:matplotlib 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 month in months: 
    alldataframes[month].Column1.plot(axarr[0]) 

子區域1和2都很好,這對他們毫無疑問。

有大約200個月,所以子圖0包含不同的200'行'。 我想添加用戶選擇顯示哪些「線條」以清除所產生的子圖的功能。 我可能會顯示200個複選框,每個月有1個複選框。選中1個框將顯示/隱藏子圖0中的相應月份。 有沒有更方便的界面呢? 如果不是,我該怎麼做與pyqt4或matplotlib?

感謝

回答

0

您可以嵌入matplotlib圖形劃分成PyQt的圖形用戶界面,但它是一個有點複雜,您的情況,您可以將QT碼頭面板添加到一個存在的人物。這裏有一個例子:

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

+0

我沒試過這個代碼與PyQt5輕微的修改。該應用程序啓動,一個窗口閃爍並關閉。我什麼也看不見。 – 2017-02-28 19:26:03

+0

也許我已經猜到了最後缺失的部分:pl.show()。我收到了一些可以打開/關閉的不同頻率的正弦波 – 2017-02-28 19:42:21