jupyter notebook plot with plotly
인터렉티브 챠트 그리기
안녕하세요. 클스 입니다.
1. 개요
- 데이터 분석을 하다보면 jupyter EDA 과정이나 분석 결과를 시각화하는 데 Jupyter Notebook을
많이 사용한다.
그려지기 때문에 좀 더 세분화하여 보려면 챠트를 다시 그려야 한다.
- 이때 챠트의 범위를 지정하여 세분화를 자동으로 할 수 있게 interactive한 챠트를 그릴 수 있는 것이
바로 plotly이다.
2. 소스 및 데이터
- 데이터는 아래와 같이 tm, 001 이다. data.csv 로 저장해둔다
tm,001
2023-10-19 00:00:00,2.071314
2023-10-19 00:10:00,2.0601258
2023-10-19 00:20:00,2.0492716
2023-10-19 00:30:00,2.0405643
2023-10-19 00:40:00,2.0341525
2023-10-19 00:50:00,2.0311875
2023-10-19 01:00:00,2.0286407
2023-10-19 01:10:00,2.0251791
2023-10-19 01:20:00,2.025551
2023-10-19 01:30:00,2.026254
2023-10-19 01:40:00,2.0247104
2023-10-19 01:50:00,2.0253887
2023-10-19 02:00:00,2.0254912
2023-10-19 02:10:00,2.029705
2023-10-19 02:20:00,2.0295382
2023-10-19 02:30:00,2.0286813
2023-10-19 02:40:00,2.028376
- plotly로 시각화 하기
import plotly.express as px
import pandas as pd
df_chart = pd.read_csv('data.csv')
df_chart['tm'] = pd.to_datetime(df_chart['tm'])
df_chart.set_index('tm')
start_dt = df_chart['tm'].iloc[0]
end_dt = df_chart['tm'].iloc[-1]
print(f'{start_dt} - {end_dt}')
fig = px.line(df_chart, x="tm", y="001", title='시각별 2차 압력 ', text="001")
fig.update_xaxes(
# tickvals=pd.date_range(start=start_dt, end=end_dt, freq='6H'),
title_text='시간',
tickangle=-45,
tickformat='%Y-%m-%d(%a) %H:%M',
showticklabels=True,
showspikes=True,
spikemode='toaxis',
ticks="outside",
tickwidth=2,
tickcolor='crimson',
ticklen=10,
)
fig.update_yaxes(title_text='2nd 압력', ticks="outside", tickwidth=2,
tickcolor='crimson', ticklen=10, col=1)
fig.update_traces(textposition="bottom right")
fig.show()
결과
- matplotlib 으로 시각화 하기 (한글을 표시하기위해 나눔고딕 폰트가 필요하다)
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from matplotlib.dates import DateFormatter
from matplotlib import dates
path = '/Library/Fonts/NanumGothic.otf'
fontprop = fm.FontProperties(fname=path, size=18)
df_chart = pd.read_csv('data.csv')
df_chart['tm'] = pd.to_datetime(df_chart['tm'])
df_chart.set_index('tm')
start_dt = df_chart['tm'].iloc[0]
end_dt = df_chart['tm'].iloc[-1]
print(f'{start_dt} - {end_dt}')
# 그래프 그리기
plt.figure(figsize=(20, 5))
# 데이터를 플롯
plt.plot(df_chart['tm'], df_chart['001'], label='Data', color='b')
# X 레이블을 6시간 간격으로 설정
ax = plt.gca()
date_format = DateFormatter("%Y-%m-%d %H:%M(%a)")
ax.xaxis.set_major_formatter(date_format)
ax.xaxis.set_major_locator(dates.HourLocator(interval=3)) # 시간 간격
plt.xticks(rotation=45) # X 레이블의 날짜/시간을 회전하여 가독성 향상
plt.title('시각에 따른 압력 데이터', fontsize=14, fontproperties=fontprop) # 제목 설정
plt.xlabel('시각', fontsize=12, fontproperties=fontprop) # X 레이블 설정
plt.ylabel('2차 압력값', fontsize=12, fontproperties=fontprop) # Y 레이블 설정
plt.legend() # 범례 추가
plt.grid() # 그리드 추가
# 그래프 표시
plt.tight_layout() # 그래프를 화면에 맞게 조정
plt.show()
- 결과
만약 날짜 범위를 조절하려면 소스를 수정해서 다시 그려줘야 한다.
3. 결론
- 인터렉티브한 그래프는 plotly로 그리자.
https://plotly.com/
이상 클스 였습니다.
이것저것 귀여운 것 파는 샵
집순희 굿즈샵 : https://marpple.shop/kr/cutykids?page=0
댓글
댓글 쓰기