GUI를 사용하여 시퀀스 데이터의 차트를 작성했습니다.
19003 단어 condaPython3PySimpleGUImatplotlib
Python version:3.9.7
OS: windows 10.0
Anaconda:conda 4.11.0
※PySimpleGUI、dataframe_이미지가 conda의 라이브러리에 표준 입력이 없기 때문에 추가되었습니다.
이루고 싶고 하고 싶은 일
·GUI를 통해 합계할 csv 파일을 선택합니다.
・ 통합 로그 폴더를 만들고 새로 만든 데이터를 저장합니다.저장된 폴더를 엽니다.
• 3개의 차트를 동일한 시간 순서로 취합합니다.
• describe(count,mean,std,min,25%,50%,75%,max) 데이터 테이블을 제작한다.
・def를 사용해 보세요.
· GUI에서 만든 파일을 출력합니다.
과제.
・matplotlib을 사용하여 양식을 만듭니다.나는 데이터 프레임에서 간단하게 만들 수 있을 거라고 생각했지만 잘 모르겠다.
데이터 프레임을 만들고 csv 파일을 만들기로 했습니다.
추기이미지로 제작되었습니다.
code
type_1.1.py
import PySimpleGUI as sg
import pandas as pd
import matplotlib.pyplot as plt
import ntpath
import os
import subprocess
import dataframe_image as dfi
# User Function
import gui_operation
# Get csv data from GUI
file_path = gui_operation.read_csv_file()
if file_path != "NULL": # run only selecting csv file,
# Variable setting
file_name = ntpath.basename(file_path)
axis_name = ['pressure','temperature','humidity']
axis_len = len(axis_name) # axis_name couont.
#絶対ディレクトリでファイル指定する。
df = pd.read_csv(file_path)
#保存先のディレクトリ作成
os.makedirs('log', exist_ok=True)
#group化し、describeの取得。
grouped = df.groupby('date')
for i in range (axis_len):
df_sescribe = grouped.describe()[axis_name[i]]
df_sescribe.insert(0, 'item',axis_name[i])
if i == 0 :
df_append = df_sescribe
else:
df_append = df_append.append(df_sescribe, ignore_index=True)
df_append.to_csv( "./log/" + file_name[4:8] + "_output_pd.csv", encoding="shift_jis")
dfi.export(df_append, "./log/" + file_name[4:8] + "dataframe.png")
# フォルダを開く
cwd = os.getcwd() #現在のディレクトリ情報を取得
subprocess.Popen(["explorer", cwd + "\log" ], shell=True) #file open
# pandas のdate time編集
df['daytime'] = pd.to_datetime( file_name[0:4] + '/' + df['date'] + ' ' + df['time'])
# set up figure size
fig = plt.figure(figsize=(8,6))
# X軸の値取得 - 共通部分
x1 = pd.to_datetime(df['daytime'])
for i in range (axis_len):
ax = fig.add_subplot(3,1,i+1)
if i == 0 : # 最初
ax.set_title(file_name[4:8] + ' vs pressure,temperature,humidity') # グラフ タイトル
if i == (axis_len - 1):
ax.set_xlabel("time") # x 軸 ラベル
else:
ax.axes.xaxis.set_ticklabels([]) #ラベル/テキストを非表示にする
y1 =pd.Series(df[axis_name[i]], dtype='float')
ax.plot(x1, y1) # 値のplot
ax.set_ylabel(axis_name[i]) # y 軸 ラベル
ax.grid(True) # grid 表示 ON
ax.legend([axis_name[i]]) # 凡例 を 表示
plt.xticks(rotation=45) # 軸のローテーション
plt.rcParams['figure.subplot.bottom'] = 0.25 #下端の調整
plt.show()
#画像の表示
fig.savefig("./log/" + file_name[4:8] +"_img.png")
sg.theme('SystemDefault')
layout = [
[sg.Image('./log/' + file_name[4:8] +'_img.png'),sg.Image("./log/" + file_name[4:8] + "dataframe.png")]
]
window = sg.Window('画像', layout=layout)
# イベントループ
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
window.close()
def를 다른 파일로 정의하고 싶어서 선택한 부분은gui입니다operation.py로 기술했습니다.파일을 선택하지 않은 상태에서 이벤트 작업 후 Inputext에 있는 텍스트를 입력하십시오. 그렇지 않으면 아무것도 들어오지 않습니다.
이벤트 작업 후 조건 지점에서 csv 파일을 선택한 Submit을 제외하고 NULL 출력으로 데이터 처리를 하지 않습니다.
gui_operation.py
import PySimpleGUI as sg
def read_csv_file():
# GUI color select
sg.change_look_and_feel('Light Blue 2')
layout = [[sg.Text('Data'),
sg.InputText(' file path',key='-file-'),
sg.FilesBrowse('Read file', target='-file-', file_types=(('csv file', '.csv'),))],
[sg.Submit(), sg.Cancel()]
]
# Make a window
window = sg.Window('Charting', layout)#window title
# Event operation
while True:
event, values = window.read() # Event read
if event in 'Submit':
Get_file = values['-file-'] # Get file path
if Get_file == ' file path':
Get_file = 'NULL'
break
else:
Get_file = 'NULL' # Get file path
break
window.close()
return Get_file
사용한 입력 파일의 추가 방법을 이해했기 때문에 여기에 두지 않았다.
방법을 알았으면 내가 다시 보충할게.
Reference
이 문제에 관하여(GUI를 사용하여 시퀀스 데이터의 차트를 작성했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yutaka_m/items/bd0ce25430b120850bb6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)