본문 바로가기
프로그램

[파이썬] 문제 : tkinter에 matplotlib chart 그리기

by 오디세이99 2023. 5. 7.
728x90
반응형
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk

root = tk.Tk()  #Tk 객체 생성. 기본 윈도우 객체
root.geometry('500x500')
root.title('')
root.resizable(True, True)

data_x = []
data_y = []
def data():                           # 파일 읽어 데이터 가져오기
    f = open('data06.txt','r')        # 파일 열기
    lines = f.readlines()
    x = []
    y = []
    for Li in lines:                  # 라인 읽기
        tmp = Li.split('|')            # 한 라인 데이터를 '|'로 분리
        x.append(tmp[1].strip())       # x에 데이터 추가
        y.append(tmp[2].strip())       # y에 데이터 추가
    f.close()                          # 파일 닫기

    global data_x                      # 전역 변수
    global data_y
    x = list(map(float, x))            # 문자열을 float 타입으로 변환
    y = list(map(float, y))
    data_x = x                         # 전역변수에 x 대입
    data_y = y               


def draw():                           # plot 그리기 함수
    if data_x:                        # 데이터가 있으면
        fig.add_subplot(1,1,1).plot(data_x, data_y)   # plot 그리기
        canvas.draw()                                 # 

fig = Figure(figsize=(5, 4.5))                                       #그리프 그릴 창 생성
plt.rcParams['axes.unicode_minus'] = False                           #  - 표시
canvas = FigureCanvasTkAgg(fig, master=root)                          # canvas 추가
canvas.get_tk_widget().grid(row=0, column=0, columnspan=2)

btn1 = tk.Button(root, text="첫번쨰 파일", width=10, command=data)   # 버튼 추가
btn1.grid(row=2, column=0)
btn3 = tk.Button(root, text="draw", width=10, command=draw)
btn3.grid(row=2, column=1)

root.mainloop()

data06.txt
0.00MB

 

 

 

2개의 파일 사용하고, chart 2개 그리기

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk

root = tk.Tk()  #Tk 객체 생성. 기본 윈도우 객체
root.geometry('500x500')
root.title('')
root.resizable(True, True)

data_x = [[],[]]
data_y = [[],[]]
def data(f_idx):                           # 파일 읽어 데이터 가져오기
    if f_idx == 1:
        f_name = 'data06.txt'
    elif f_idx == 2:
        f_name = 'data07.txt'

    f = open(f_name,'r')        # 파일 열기
    lines = f.readlines()
    x = []
    y = []
    for Li in lines:                  # 라인 읽기
        tmp = Li.split('|')            # 한 라인 데이터를 '|'로 분리
        x.append(tmp[1].strip())       # x에 데이터 추가
        y.append(tmp[2].strip())       # y에 데이터 추가
    f.close()                          # 파일 닫기

    global data_x                      # 전역 변수
    global data_y
    x = list(map(float, x))            # 문자열을 float 타입으로 변환
    y = list(map(float, y))
    
    if f_idx == 1:
        data_x[0] = x                         # 전역변수에 x 대입
        data_y[0] = y
    elif f_idx == 2:
        data_x[1] = x                         # 전역변수에 x 대입
        data_y[1] = y
        


def draw():                           # plot 그리기 함수
    if data_x[0]:                        # 데이터가 있으면
        fig.add_subplot(1,1,1).plot(data_x[0], data_y[0])   # plot 그리기
    if data_x[1]:
        fig.add_subplot(2,1,1).plot(data_x[0], data_y[0])   # plot 그리기
        fig.add_subplot(2,1,2).plot(data_x[1], data_y[1])   # plot 그리기
    canvas.draw()                                 # 

fig = Figure(figsize=(5, 4.5))                                       #그리프 그릴 창 생성
plt.rcParams['axes.unicode_minus'] = False                           #  - 표시
canvas = FigureCanvasTkAgg(fig, master=root)                          # canvas 추가
canvas.get_tk_widget().grid(row=0, column=0, columnspan=3)

btn1 = tk.Button(root, text="첫번쨰 파일", width=10, command=lambda: data(1))   # 버튼 추가
btn1.grid(row=2, column=0)
btn2 = tk.Button(root, text="두번쨰 파일", width=10, command=lambda: data(2))   # 버튼 추가
btn2.grid(row=2, column=1)
btn3 = tk.Button(root, text="draw", width=10, command=draw)
btn3.grid(row=2, column=2)

root.mainloop()

data07.txt
0.00MB

728x90
반응형

댓글