import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# CSV 파일 읽기
df = pd.read_csv('data.csv')
# 날짜를 인덱스로 설정
df.set_index('날짜', inplace=True)
# 데이터가 있는 층의 열만 선택
layers = df.columns[1:]
# 각 층별 데이터를 리스트에 저장
data = []
for layer in layers:
values = df[layer].dropna().values
data.append(values)
# 차트 설정
plt.figure(figsize=(10, 6))
colors = plt.cm.rainbow(np.linspace(0, 1, len(data)))
# 각 층별로 선 그래프 그리기
for i, layer_data in enumerate(data):
plt.plot(layer_data, color=colors[i], label=f'{i+1}층')
# 그래프에 범례 추가
plt.legend()
# 그래프 출력
plt.show()
#2 개선
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 폰트 경로 설정
font_path = 'C:/Windows/Fonts/NanumGothic.ttf' # NanumBarunGothic 폰트 경로로 수정해주세요
# 폰트 이름 얻기
font_name = fm.FontProperties(fname=font_path).get_name()
# 폰트 설정
plt.rcParams['font.family'] = font_name
# CSV 데이터를 DataFrame으로 읽어오기
data = pd.read_csv('data.csv')
# 데이터를 layer로 그룹화하기
grouped_data = data.groupby('layer')
# 각 layer별로 차트 그리기
for layer, layer_data in grouped_data:
# 날짜를 datetime 형식으로 변환
layer_data['date'] = pd.to_datetime(layer_data['date'])
# 날짜를 오름차순으로 정렬
layer_data.sort_values('date', inplace=True)
# 5개 층마다 차트 분할
if layer % 5 == 1:
plt.figure() # 새로운 차트 생성
# 2015-1-1 이후의 데이터 필터링
layer_data = layer_data[layer_data['date'] >= '2015-01-01']
if not layer_data.empty: # 필터링 결과가 비어있지 않을 경우에만 차트 그리기
# 차트 그리기
plt.plot(layer_data['date'], layer_data['amount'], label=f'층 {layer}')
# 차트 제목, 축 레이블 등 설정
if layer % 5 == 1:
plt.title(f'층별 금액 (층 {layer} - {(layer + 4) if layer <= 15 else "Final"})')
plt.xlabel('날짜')
plt.ylabel('금액')
plt.legend()
# x축에 날짜 표시
plt.xticks(rotation=45)
plt.gca().xaxis.set_major_locator(plt.MaxNLocator(5)) # x축 눈금 개수 설정
# 데이터 포인트에 날짜 텍스트 표시
for i, row in layer_data.iterrows():
plt.text(row['date'], row['amount'], row['date'].strftime('%Y-%m-%d'), ha='center', va='bottom')
# if layer == 1:
# break
# 차트 출력
plt.show()
'프로그래밍 > 파이썬' 카테고리의 다른 글
판다스 기본 사용법 (1) | 2023.11.13 |
---|---|
가상환경에 파이썬 3.9.7 설치 (0) | 2023.06.03 |
값을 저장하고 읽는 방법 chatgpt (0) | 2023.04.07 |
flask 에서 인수를 받는 방법 chatgpt (0) | 2023.03.28 |
pdf 근접단어 찾기(pdfminer) chatgpt (0) | 2023.03.21 |