組み込み開発のためのPython · レッスン 132 / 238
Matplotlib Markers:点の形を設定する
markerは系列の各データ点を示します。線種や色と組み合わせ、白黒印刷や色覚の違いでも系列を区別できるようにします。
markerは系列の各データ点を示します。線種や色と組み合わせ、白黒印刷や色覚の違いでも系列を区別できるようにします。 仕組みだけでなく、検証方法と運用上の注意も具体例で確認します。
markerが示すもの
Matplotlibのmarkerは系列内の個々のデータ点を視覚的に表します。折れ線の途中に置けば観測が存在する位置が分かり、線だけでは連続した範囲に観測値があると受け取られそうな場合にも役立ちます。markerは観測数を増やすものではなく、データの意味を変えるものでもありません。測定点の数、間隔、順番を明確にした上で、読み手が点と線を区別できるか確認してください。点が少ない系列では形状が有効ですが、何千点もある場合は重なりが増え、逆に情報を読みづらくすることがあります。データ量に合った表示方法を選びます。
markerの種類を選ぶ
Matplotlibには円、四角、三角、十字など複数のmarker形式があります。系列ごとに形を変えると色に頼らず区別できますが、形が多すぎると凡例とデータの対応が難しくなります。使用する系列数を絞り、意味を持つ形状を一貫して使いましょう。形を指定する文字列は大文字小文字や記号に意味があるため、公式のmarker一覧を確認します。独自の複雑なパスを作る機能もありますが、共有する図では一般的な形状の方が読み手に伝わりやすい場合があります。小さな表示サイズでも形を見分けられることを実際の出力で確かめてください。
サイズと線幅を調整する
markersizeやmsはmarkerの大きさを指定し、markeredgewidthやmewは境界線の太さに関係します。大きすぎる点は隣の観測を覆い、小さすぎる点は縮小表示や印刷で消えてしまいます。図全体の寸法、出力dpi、データ密度を考慮して設定しましょう。複数の図で比較する場合、サイズを変更した理由を記録し、片方だけ強調されていないか確認します。点の面積は見た目の強さに影響するため、数値の大きさをmarkerサイズへ直接割り当てると誤解を招くことがあります。必要な場合は対応関係を説明し、適切な尺度変換を用います。
塗りつぶしと境界線
markerfacecolorは内部の塗り、markeredgecolorは境界線の色を調整します。白抜きのmarkerは線と点を区別しやすい場合があり、塗りつぶしは小さな表示でも目立ちます。背景色とのコントラストを確保し、境界線が太すぎて形を潰さないようにします。色を系列の意味に結び付ける場合は、同じ条件が他の図でも同じ色になるように統一してください。半透明の点は重なり具合を示す助けになりますが、色の混ざりがカテゴリを誤認させることもあります。出力先の背景や印刷条件を変えても判読できるか試験します。
線とmarkerを組み合わせる
plotではlinestyleとmarkerを組み合わせ、観測点と系列のつながりを同時に表示できます。例えば点線と四角のmarkerを使えば、実線と円の系列と区別できます。組合せを増やしすぎると視覚的な複雑さが上がるため、色、線種、形状のうち必要な違いだけを利用してください。線を描かずmarkerだけを出したい場合は、線種をnone相当にするかscatterを使う選択があります。線がない散布図と、点を結んだ系列では伝える意味が異なります。どちらを選ぶかをデータの順序性と観測過程から決め、凡例の表示例が図と一致しているか確認します。
markeveryで表示密度を抑える
非常に長い系列へすべてのmarkerを描くと重なり、レンダリング時間も増えます。markeveryはmarkerを表示する位置を間引くのに使えます。これは描画上の工夫であり、元のデータ自体を削除する処理ではありません。間引き間隔が重要なピークや急変点を隠さないか確認し、必要ならピーク付近を含む方式を検討してください。横軸の距離が不均一なデータでは、点数間隔だけでなく表示上の間隔にも注意が必要です。間引きしたことを図の説明やコードに明示し、解析や統計量の計算には元データを使用します。
色以外の違いを活用する
色覚の違いや白黒印刷を考慮し、系列を色だけで区別しないようにします。marker形状、線種、塗りつぶし、位置の違いを組み合わせると、複数条件が判別しやすくなります。色の数が多いと似た色同士を見分けられないため、系列をグループ化して図を分けることも考えてください。凡例に記号と名称を並べ、読み手が図上の系列へ対応できるようにします。アクセシビリティを確認する際は、グレースケール表示や色覚シミュレーションだけでなく、印刷や縮小表示も確かめます。線とmarkerの太さや形が出力先でも維持されているか検証します。
markerと散布図を使い分ける
plotのmarkerは線系列の各点を示し、scatterは各点の位置を独立したデータとして描きます。scatterは点ごとにサイズや色をデータ値で変える用途に適していますが、配列の意味、カラーマップ、サイズ尺度を適切に設定してください。plotは系列の順序を線で表すのに向き、scatterは点同士を結ばない関係を見せるのに向きます。同じデータを両方で描いて比較すると、順序を表す線が必要か判断しやすくなります。サイズ配列の値は画面上の面積として扱われるため、値をそのまま設定せず、読みやすい範囲へ変換します。凡例やカラーバーに表現の意味を示しましょう。
重なりと透明度
同じ位置に近い点が多数あると、markerが重なり、件数や密度が見えなくなることがあります。alphaで透明度を下げると重なりを推測しやすくなりますが、背景や色の組合せによって実際の密度と異なる印象を与える場合があります。大量点ではhexbin、二次元ヒストグラム、密度推定などを検討し、点の個数やビン設定を明示します。小規模なデータではすべての点を表示し、代表点の説明を添える方法が適切なこともあります。表示方法を変えた場合、元データから何を集約したか説明し、表示上の点数と観測数を混同しないようにしてください。
凡例と系列識別を整える
各系列にlabelを設定しlegendを表示すると、marker形状や色の意味を示せます。ラベルは装置番号だけでなく、比較条件や測定内容が分かる名称にします。系列数が多いと凡例がデータ領域を覆うため、配置を変える、複数列にする、図外へ置く、別の図へ分ける方法を検討します。凡例のmarkerサイズを変える設定は、図上の点のサイズと異なるため、対応を誤認させないか確認してください。ラベルの重複や系列順の変化にも注意します。凡例を付けた後に画像を縮小し、配置と文字サイズが読みやすいままか実際の利用条件で確かめます。
データの不整合を防ぐ
markerを表示する前に、xとyの長さ、値の有限性、時刻順、単位を検査します。複数系列を並べ替えるときに片方の配列だけを変更すると、markerは描かれても別の値同士が結び付いてしまいます。欠損値や外れ値を除外するときは、同じマスクをすべての対応列へ適用してください。誤ったデータ対応は見た目から発見できない場合があるため、代表的な座標を出力して原データと照合します。markerの位置をテストする場合は、AxesのLine2Dオブジェクトが保持するデータを確認できます。入力が不正なときに空の図で成功を報告せず、何が問題か明示する設計にします。
練習課題:系列を見分けやすくする
三つの測定条件のデータを一つの図へ描き、条件ごとにmarker形状と線種を変えてください。最初は色をすべて同じにし、白黒でも条件を判別できるか確認した後、コントラストのある色を追加します。点が密集する範囲ではmarkerサイズと透明度を変更し、全点表示、間引き表示、密度表示を比較します。凡例の名称、marker、線の対応を試験し、出力を縮小しても読めるか確認します。最後に、サイズや色で追加情報を表した場合は、その尺度と単位を説明します。図に含めたデータ数、間引きや除外の規則を記録し、表示上の調整が元データを変更していないことを確認してください。
コード例
手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [3, 2, 4], marker="s", linestyle="--", label="基準")
ax.legend()
plt.show()手を動かす課題
複数系列を異なるマーカーと線種で表し、色だけに依存しない凡例を作ってください。