PySimpleGUI에서 Matplotlib의 xy 그래프를 표시합니다.

소개



PySimpleGUI의 샘플 프로그램을 참고로 파일을 읽어 xy 그래프를 표시하는 프로그램을 만들어 보았다.
샘플 프로그램: PySimpleGUI-cookbook-(Recipe-Compare 2 Files), (Matplotlib Window With GUI Window)

기타 참고
PySimpleGUI로 그래프 그리기
tkinter (pySimpleGUI)에서 matplotlib없이 그래프를 작성하는 방법

환경



Win10Pro
아나콘다
Python3.7

PySimpleGUI 설치에 대한 자세한 내용은 이전 기사 PySimpleGUI로 QR 코드 작성 GUI 만들기를 참조하십시오.

작성 프로그램



x, y 데이터가 포함된 CSV 파일을 업로드하여 그래프를 작성하는 프로그램
from pathlib import Path

import matplotlib.pyplot as plt
import pandas as pd
import PySimpleGUI as sg


sg.theme('Light Blue 2')

def draw_plot(x,y):
    plt.plot(x,y)
    plt.show(block=False)
    #block=Falseの指定をしないと、その間コンソールは何も入力を受け付けなくなり、GUI を閉じないと作業復帰できない。

def check_file(file_name):
    p = Path(file_name)
    print(p.suffix)
    if p.suffix == '.csv':
        df = pd.read_csv(p) 
        x = df.iloc[:,0]
        y = df.iloc[:,1]

        return x, y

    else:
        print('Wrong data file, data must be CSV')  
        return None, None

layout = [[sg.Text('Enter csv data')],
          [sg.Text('File', size=(8, 1)),sg.Input(key='-file_name-'), sg.FileBrowse()],
          [sg.Submit()],
          [sg.Button('Plot'), sg.Cancel()],
          [sg.Button('Popup')]]

window = sg.Window('Plot', layout)

while True:
    event, values = window.read()

    if event in (None, 'Cancel'):
        break
    elif event in 'Submit':
        print('File name:{}'.format(values['-file_name-']))
        x,y = check_file(values['-file_name-'])

        if x[0] == None:
            sg.popup('Set file is not CSV')

    elif event == 'Plot':
        draw_plot(x,y)

    elif event == 'Popup':
        sg.popup('Yes, your application is still running')
window.close()

프로그램을 실행하여 파일 이름을 지정합니다. 옆의 'Browse'를 누르면 파일을 선택할 수 있습니다. 그리고 'Submit'을 누릅니다.


그리고 'Plot'을 누르면 그래프가 플롯됩니다.


덧붙여 이번에 사용한 CSV 데이터를 만드는 프로그램은 이쪽
HDF5에 다양한 파일 저장에서 만든 것과 동일합니다.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

def base_func(x,a,b,c):
    y = c + a*(x - b)**2
    return y

x = np.arange(-30, 30, 1)
para = [2.0,5.0,10.0]
np.random.seed(seed=10)
y = base_func(x,para[0],para[1],para[2])+np.random.normal(0, 60, len(x))

plt.scatter(x , y)
plt.show()

#dataをdataframeでcsvにする
df = pd.DataFrame({'x':x,'y':y})
df.to_csv('csvdata.csv',index=False)

요약



역시 손쉽게 만들 수 있습니다!

좋은 웹페이지 즐겨찾기