組み込み開発のためのPython · レッスン 129 / 238
Matplotlib Get Started:最初のグラフを描く
pyplotを使うと少ないコードで描画を始められます。再利用するプログラムではFigureとAxesを明示的に扱い、軸の名前、単位、凡例を付けます。
pyplotを使うと少ないコードで描画を始められます。再利用するプログラムではFigureとAxesを明示的に扱い、軸の名前、単位、凡例を付けます。 仕組みだけでなく、検証方法と運用上の注意も具体例で確認します。
描画環境を整える
Matplotlibを使う前に、プロジェクトの仮想環境へライブラリーを導入し、実行するPythonと同じ環境に入ったことを確認します。Notebook、デスクトップ、CI、リモートサーバーでは図を表示する方法が異なります。最初に使用環境を特定し、対話表示が必要か、ファイルへ保存できればよいかを決めてください。Pythonファイルの実行場所と出力ディレクトリも明示すると、図が意図しない場所へ保存される問題を防げます。ライブラリーの版を記録しておけば、別環境で描画の差が起きたときに原因を切り分けやすくなります。
pyplotを読み込みFigureを作る
一般的な最初の例ではmatplotlib.pyplotをpltという名前で読み込み、subplotsでFigureとAxesを作ります。Figureは図全体、Axesはデータを描く領域です。オブジェクトを変数に保持しておくと、図を保存したり、複数の軸へ異なる系列を加えたりできます。暗黙の現在状態だけに依存する方法は短い例で便利ですが、関数や大きなスクリプトではどの図に設定を適用しているか分かりにくくなります。図の目的を決めてからAxesへ描画し、後から軸やラベルを調整できる形にしておきましょう。
xとyの値を対応させる
線を描くときは、横軸の値と縦軸の値を対応する順に渡します。xを省略すると0から始まる位置が使われますが、時刻や電圧など意味のある値を持つ場合は明示してください。xとyの要素数が異なるとエラーになります。同じ長さでも並び順が違えば、存在しない関係を図にしてしまいます。データを前処理した後に同じ並べ替えを両方へ適用したかを確認し、先頭と末尾の組を点検します。CSVなど別々の列を読み込んだ場合は、欠損行を除く際に片側だけを操作しないことが大切です。
線を描いて軸を説明する
Axesのplotメソッドで系列を描き、set_xlabelやset_ylabelで軸名を付けます。測定値にはV、ms、MHzなどの単位を明示し、桁数や表記を読み手に合わせます。タイトルは装置名、設定条件、測定期間などの文脈を補足します。図のタイトルだけにすべての条件を書き込むと読みにくくなるため、短い図題とキャプションを使い分ける方法もあります。表示した後に文字が切れていないか、単位が正しいか、凡例がデータに対応しているか確認してください。図だけを別資料へ貼り付けても意味が伝わる程度の説明を含めると、後で再利用しやすくなります。
マーカーと線種でデータ点を示す
markerを指定すると各データ位置を示せます。少ない点を線で結ぶ場合はマーカーが有効ですが、点が非常に多い系列ではすべてのマーカーが重なり、図が暗くなることがあります。その場合はマーカーを間引くか、散布図や透明度の設定を検討します。色、線種、マーカーを組み合わせて複数系列を区別し、色だけに依存しない図にしてください。系列の意味と見た目の対応は凡例で示します。スタイルを変えた後は、線の太さやマーカーサイズが出力画像の寸法に対して適切かを確認し、画面と印刷の両方で読みやすく調整します。
図を画面に表示する
plt.showは対話環境で図を表示します。実行環境やバックエンドによっては処理がブロックする場合や、画面が存在せず表示できない場合があります。Notebookではセルの実行後に図が表示される仕組みが働くこともありますが、通常のPythonスクリプトでは明示的に表示する必要があります。表示後に図を追加変更する動作が環境によって異なるため、必要な描画をすべて行ってから表示しましょう。自動処理では表示を前提にせず、ファイル保存を中心に組み立てると安定します。結果が画面に現れない場合はデータが空なのか、表示のバックエンドに問題があるのかを分けて調べます。
画像として保存する
Figureのsavefigを使うとPNGなどの画像を作成できます。拡張子から形式が推測される場合がありますが、保存先、形式、dpi、背景色などを用途に合わせて指定してください。相対パスはカレントディレクトリ基準なので、スクリプトの場所と実行場所が異なると出力先が変わります。絶対パスやpathlibを使って保存場所を明確にする方法があります。既存ファイルを上書きするなら、出力先が正しいことを確認します。保存後はファイルの存在だけでなく、実際に画像を開いて文字切れ、空白、解像度、余白を目視で確認しましょう。
複数のFigureを管理する
一つの処理で複数のFigureを作るときは、それぞれを変数に保持し、保存後にcloseして資源を解放します。Figureを閉じずに繰り返し作成すると、メモリーが増加し、警告が出る場合があります。現在の図を暗黙に操作する形式では、前の図へ描き続けたり、別の図を保存したりする取り違えが起こりやすくなります。図を作る関数はFigureやAxesを返す形にすると、呼び出し側で表示や保存を制御できます。多数のグラフをバッチ生成する場合は、一件ごとに図を閉じ、失敗した図が次の結果へ影響しないようにします。
スタイルと色の一貫性
Matplotlibには線色、フォント、グリッドなどのスタイル設定があります。複数図を作成する場合、系列や条件の色を一貫して使うと、読み手が比較しやすくなります。色の選択は装飾ではなく情報の一部です。背景とのコントラスト、色覚特性、白黒での印刷を考え、線種やマーカーも併用してください。スタイルシートやrcParamsで全体設定を変えると、同じプロセス内の他の図にも影響することがあります。意図しない設定の持ち越しを防ぐため、局所的な指定を使うか、設定をコンテキスト内に限定します。図を複数環境で出力し、外観の差を確認してください。
データの種類に合う形式を選ぶ
時系列なら線、カテゴリ比較なら棒、二つの数値の関係なら散布図、分布ならヒストグラムが出発点になります。形式を選ぶときは、データが順序を持つか、値が連続かカテゴリか、読み手が何を比べるかを考えます。線グラフは連続した中間値を想像させるため、離散したカテゴリを不必要に結ばないようにしてください。棒グラフではゼロを基準にし、ヒストグラムではビン幅の影響を示します。種類を変えると見える傾向も変わるため、グラフを作る前に問いを明確にします。表示の目的と限界を説明し、図から直接分からない因果関係を断言しないようにします。
よくある失敗を切り分ける
図が表示されない場合は、データが存在するか、Axesに系列が追加されたか、バックエンドが表示可能かを順に確認します。空の配列、長さの異なるxとy、日本語フォント不足、保存先の権限不足はよくある原因です。エラーをexceptで無視すると、古い画像が残って新しい結果に見えることがあります。描画や保存に失敗したら、例外を記録し、出力ファイルの生成時刻も確認してください。小さな固定データで最小例を作ると、元データや複雑な処理から問題を切り分けられます。環境、ライブラリーの版、使用バックエンドを記録し、同じ条件で再現できるようにします。
練習課題:最初の図を仕上げる
電圧と時刻の短い測定系列を用意し、FigureとAxesを明示して折れ線とマーカーを描きましょう。タイトル、軸名、単位、凡例を追加し、PNGへ保存します。画面に表示できない環境でもファイルが作れるようにし、空データや長さの違う入力で分かりやすい失敗になるか試してください。次に同じ図を別の色と線種で表し、色だけでなく形状でも条件を区別できるようにします。保存画像を開き、文字の切れ、軸範囲、凡例の位置を確認し、設定を変えた理由を記録してください。コードを関数に分け、複数系列へ再利用できる形に整理します。
コード例
手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4], label="測定系列")
ax.set_xlabel("サンプル")
ax.set_ylabel("値")
ax.legend()
fig.savefig("plot.png", dpi=150)手を動かす課題
グラフを画面表示とPNG保存の両方で出力し、ファイルが意図したサイズで作成されたか確認してください。