組み込み開発のためのPython · レッスン 138 / 238
Matplotlib Bars:棒グラフを作る
棒グラフはカテゴリ間の量を比較します。棒の長さが値を表すため、通常はゼロを基準にし、カテゴリ名や単位を明確にします。
棒グラフはカテゴリ間の量を比較します。棒の長さが値を表すため、通常はゼロを基準にし、カテゴリ名や単位を明確にします。 仕組みだけでなく、検証方法と運用上の注意も具体例で確認します。
棒グラフでカテゴリを比較する
棒グラフは離散したカテゴリや条件ごとの数値を比較するために使います。各棒の長さが量の違いを示すため、一般には値がゼロから始まる軸を使います。ゼロを省くと小さな差が大きく見え、読み手を誤解させることがあります。棒の高さが件数、平均、合計、比率のどれを示すのか明確にし、単位と集計方法を示してください。カテゴリの順序はデータの取得順、論理的な順序、または値の大小など目的に応じて定めます。棒グラフは各カテゴリ内の分布を示さないことにも注意します。
Axes.barの基本
Axes.barへカテゴリ位置と各値を渡すと縦棒を描けます。カテゴリ名をx位置として直接渡すこともできます。xとheightの個数が一致しているか確認し、カテゴリ名の重複や空文字がないか調べてください。barの返り値は棒のRectangle群なので、必要に応じて各棒の値や表示を検査できます。棒幅widthはカテゴリ間隔に対する比率で指定し、棒同士が重なったり離れすぎたりしないようにします。描画後にx目盛りとラベルの位置が一致しているか確認し、カテゴリ数が増えたときに文字が切れないよう調整します。
カテゴリの並びを決める
カテゴリの順序は棒グラフの読み方に影響します。自然な工程順や時系列順があるならその順番を使い、比較のために値で並べる場合は並べ替えの基準を明記してください。アルファベット順は意味のある順序がない場合に使える一つの方法です。データを並べ替えたときにはカテゴリ名と値を同じインデックスで並べ替え、対応を崩さないようにします。欠けたカテゴリや値がゼロのカテゴリを表示するかは、データの意味と報告目的で決めます。すべての条件を表示しているか、表示から除外したものがないか確認し、軸の範囲と一緒に説明します。
横棒とラベルの長さ
カテゴリ名が長い場合はbarhで横棒グラフを作ると、文字を読みやすく配置できます。横棒では数値軸が横方向になるため、縦棒の軸ラベルをそのまま流用せず、xとyの意味を再確認してください。並び順は表示の下から上へ進むことがあるため、読み手が期待する順序と一致するか確認します。棒が多い場合はFigureの高さを増やし、ラベルが重ならない余白を作ります。長いラベルを短縮するときは意味を失わない略称にし、必要なら注記を付けてください。カテゴリ数を大幅に減らす場合は、除外したカテゴリと基準を明記します。
複数系列を並べて比較
同じカテゴリに複数系列がある場合、barのwidthとx位置を調整して棒を横に並べられます。各系列の棒がどの条件を示すか凡例で説明し、幅やオフセットが正しく対応しているか確認してください。カテゴリ数と系列数が増えると棒が密集して比較しにくくなるため、図を分ける、横棒にする、折れ線へ切り替えるなどを検討します。条件間でカテゴリの欠落がある場合、ゼロと欠損を混同しないようにします。並べた棒の順序を凡例の順序と一致させ、データ更新後に系列が入れ替わらないように明示したカテゴリ順を使います。
積み上げ棒と比率
bottom引数を使うと棒を積み上げ、合計の内訳を示せます。積み上げの合計と各成分が意味を持ち、全カテゴリで同じ構成要素を比較できるときに有効です。下側の成分は共通基準から比較できますが、上側の成分は基準位置が変わるため読み取りにくくなります。割合を示す場合は全カテゴリの合計が100パーセントになるように正規化したのか、絶対量を積み上げたのか明記してください。負の値を含む場合は積み上げの意味が複雑になるため、軸範囲と計算方法を確認します。積み上げ前後の合計値を検算し、欠損が総量に与える影響を説明します。
誤差範囲やばらつきを表示
棒の高さに平均を使う場合、同じ平均でも個々の値の分布は異なる可能性があります。yerrを使って標準偏差や信頼区間などを示せますが、どの定義の誤差かをラベルやキャプションに書いてください。誤差範囲はデータ数、標本分布、計算方法で解釈が変わります。点や箱ひげ図、バイオリン図など、分布の形を示す方法が適切な場合もあります。エラーバーの上下限が棒の値や軸範囲と矛盾しないか検査します。群ごとのサンプル数が異なるなら、その数も図や本文へ添え、平均だけで全データを代表させないようにします。
色とパターンで意味を伝える
カテゴリや系列ごとに色を設定すると識別しやすくなりますが、色だけに依存すると白黒印刷や色覚の違いに弱くなります。色と合わせてハッチング、境界線、凡例、カテゴリ名を用いてください。多くの色を一つの図で使うより、カテゴリをグループ化するか図を分割した方が読みやすいことがあります。色に意味を割り当てるときは同じ色を他の図でも同じ条件に使います。棒の色が高さや重要度を表す場合はカラーバーや凡例で尺度を示し、カテゴリ色と連続値の強弱を混同させないようにします。出力サイズを小さくしても境界が見えるか確認してください。
軸、グリッド、基準線
棒グラフでは値の基準が重要なので、y軸の範囲とゼロ位置を明確にします。目盛り線は棒の高さを読み取る助けになりますが、データを隠さないよう背面に置き、必要な軸だけへ表示します。目標値や許容範囲を示す水平線を加える場合、その基準の出所と単位を説明してください。軸範囲を手動で切り詰める場合、棒の長さが実際の値の差以上に見える可能性があるため、慎重に用い、切り詰めを明示します。複数パネルの棒グラフでは、軸範囲を統一して比較できるか確認し、意図しない自動範囲の差を避けます。
データ検証と欠損の扱い
棒を描く前に値が数値で有限であるか、カテゴリと一対一に対応しているか確認します。欠損した値をゼロに置き換えると、実際にゼロだったように見えるため、測定不能や未取得を別に表します。カテゴリごとの観測件数や集計対象数を検査し、欠けたカテゴリが意図的なものかエラーかを判別してください。合計や比率を計算した場合、分母と除外した値を記録します。異常に大きい値が軸を圧縮する場合、値の誤りを確認し、別図で詳細を見る方法も検討します。データの整形段階と描画段階のテストを分けると原因を追いやすくなります。
保存と代替表現
棒グラフをPNGやPDFへ保存した後、カテゴリラベル、凡例、誤差範囲が切れていないか確認します。カテゴリ数が多い図は、Figureのサイズや横棒への切替を検討し、文字を極端に小さくしないようにします。Webページや文書に掲載するなら、画像の代替テキストや本文で主要な比較結果を説明します。データそのものを表として提供すると、正確な値を必要とする読み手に役立ちます。ファイル名に対象期間や版を含める場合、機密情報を避け、出力とデータの対応を保ちます。古い図と新しい図を取り違えないよう生成日時やデータ版を記録し、更新後に図を再生成します。
練習課題:条件別の棒グラフ
三つのチャンネルの平均電圧を棒グラフで比較し、ゼロ基準の軸、単位、カテゴリ順を設定してください。個々の測定値を点で重ねるかエラーバーでばらつきを示し、統計量の意味と標本数を説明します。目標電圧の水平線を加える場合、仕様値の根拠を記録します。棒の色だけに頼らずラベルとパターンで区別し、白黒印刷と小さい画面で確認してください。カテゴリが長くなった場合は横棒へ切り替え、図の読みやすさを比較します。最後に、値の集計と欠損処理を別にテストし、描画データが元の測定条件に対応していることを確認します。
コード例
手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。
import matplotlib.pyplot as plt
channels = ["A0", "A1", "A2"]
values_mv = [3290, 3310, 3275]
fig, ax = plt.subplots()
ax.bar(channels, values_mv)
ax.set_ylabel("電圧 (mV)")
plt.show()手を動かす課題
三つのチャンネルを棒グラフにし、ゼロ基準でない軸が比較を誤解させる理由を図で確かめてください。