Pythonでリアルタイムにグラフを更新する方法はいくつかあります。ここでは、matplotlibとDashの2つの方法を紹介します。
Matplotlibを使用した方法
matplotlibを使用してリアルタイムにグラフを更新する方法は以下の通りです。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 6*np.pi, 100)
y = np.sin(x)
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
line1, = ax.plot(x, y, 'r-')
for phase in np.linspace(0, 10*np.pi, 500):
line1.set_ydata(np.sin(x + phase))
fig.canvas.draw()
fig.canvas.flush_events()
このコードでは、plt.ion()
を使用してインタラクティブモードをオンにし、fig.canvas.draw()
とfig.canvas.flush_events()
を使用してグラフをリアルタイムに更新しています。
Dashを使用した方法
Dashを使用してリアルタイムにグラフを更新する方法もあります。以下にその一例を示します。
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
import datetime
import plotly
import psutil
app = dash.Dash(__name__)
app.layout = html.Div(children=[
html.H4('システムモニタ'),
html.Div(id='live-update-text'),
dcc.Graph(id='live-update-graph'),
dcc.Interval(
id='interval-component',
interval=1*1000,
n_intervals=0
)
])
@app.callback(Output('live-update-text', 'children'),
[Input('interval-component', 'n_intervals')])
def update_metrics(n):
now = datetime.datetime.now()
style = {'padding': '5px', 'fontSize': '16px'}
return [
html.Span('CPU: {}%'.format(psutil.cpu_percent()), style=style),
html.Span('Memory: {}%'.format(psutil.virtual_memory().percent), style=style)
]
@app.callback(Output('live-update-graph', 'figure'),
[Input('interval-component', 'n_intervals')])
def update_graph_live(n):
# ここにグラフを更新するコードを書く
pass
if __name__ == '__main__':
app.run_server(debug=True)
このコードでは、Dashのdcc.Interval
コンポーネントを使用して定期的にグラフを更新しています。update_metrics
とupdate_graph_live
の2つのコールバック関数が定義されており、それぞれテキストとグラフを更新しています。
以上、Pythonでリアルタイムにグラフを更新する2つの方法を紹介しました。具体的な実装はプロジェクトの要件によりますが、これらの方法を参考にしてみてください。