2017-12-25 17 views
0

지금까지이 코드를 가지고 있습니다 : csv 데이터를 읽고 플롯 버튼을 누르면 그림 1과 같이 두 개의 메인 윈도우와 또 다른 윈도우가 표시됩니다. 그래프가 다른 윈도우에 표시됩니다 그림 2) 어떻게이 문제를 해결할 수 있습니까? 많은 시간을 미리 감사드립니다.위젯에서 pandas.plot()을 사용하여 matplotlib 그래프를 만들 수 있습니까?

import sys 
import pandas as pd 
import matplotlib 
matplotlib.use('QT5Agg') 
from PyQt5 import QtWidgets 
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout 
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar 
import matplotlib.pyplot as plt 
from matplotlib import style 
style.use('ggplot') 


class Window(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 
     self.setGeometry(600,300, 1000, 600) 
     self.center() 
     grid = QtWidgets.QGridLayout() 
     widget = QtWidgets.QWidget(self) 
     self.setCentralWidget(widget) 
     widget.setLayout(grid) 
     #Import CSV Button 
     btn1 = QtWidgets.QPushButton('Import CSV', self) 
     btn1.resize(btn1.sizeHint()) 
     btn1.clicked.connect(self.getCSV) 
     grid.addWidget(btn1, 1, 0) 

     self.figure = plt.figure(figsize=(15,5))  
     self.canvas = FigureCanvas(self.figure)  
     grid.addWidget(self.canvas, 2,0,1,2) 


     btn2 = QtWidgets.QPushButton('Plot', self) 
     btn2.resize(btn2.sizeHint())  
     btn2.clicked.connect(self.plot) 
     grid.addWidget(btn2, 1, 1) 
     self.show() 

    def plot(self): 
     self.df.plot(x='col1',y='col2') 
     self.canvas.draw() 

    def getCSV(self): 
     filePath, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', '/home') 
     if filePath != "": 
      print ("Dirección",filePath) 
      self.df = pd.read_csv(str(filePath)) 

    def center(self): 
     qr = self.frameGeometry() 
     cp = QtWidgets.QDesktopWidget().availableGeometry().center() 
     qr.moveCenter(cp) 
     self.move(qr.topLeft()) 

def main(): 
    app = QtWidgets.QApplication(sys.argv) 
    w = Window() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

답변

0

팬더의 plot() 기능은 ax라는 선택적 속성이있다 : 우리가 FigureCanvas()을 수행해야합니다 내부 그려하려면하기 matplotlib 축 개체, 기본 없음

:

도끼 먼저 축을 하나 만들고 속성으로 전달하십시오. ax :

def plot(self): 
    self.figure.clear() 
    ax = self.figure.add_subplot(111) 
    self.df.plot(x='col1',y='col2', ax=ax) 
    self.canvas.draw() 
+0

다시 도움 주셔서 감사합니다. 아주 잘 했어! 그림 1을 없애기위한 아이디어는 메인 윈도우와 동시에 나타납니다. –

+0

당신을 이해하지 못합니다. 당신이 원하는 것을 나에게 설명해 주시겠습니까? : P – eyllanesc

+0

기쁜 소식 : D! 코드를 실행하면 두 개의 창이 나타납니다 (여기 스크린 샷 : https://drive.google.com/file/d/163lRSxyApUAwRJEmdSaQOBIDnt1oLANS/view?usp=sharing) –

관련 문제