MATLABで二群のデータを散布図として重ねると、片方の系列が見えにくくなることがあります。
この記事では、scatter3 と view(2) を使い、描画順による見え方の偏りを和らげる方法を紹介します。
この記事のポイント
- 後から描画した系列は前面に表示されやすくなります。
- 仮の z 座標を追加すると、点の前後関係を分散できます。
view(2)を使えば、見た目は二次元散布図として表示できます。

散布図で片方の系列が隠れる理由
たとえば、次のコードでは赤い点を描いた後に青い点を描画しています。
figure;
hold on
scatter(x1, y1, 50, 'r', 'filled', 'MarkerFaceAlpha', 0.5); % 赤
scatter(x2, y2, 50, 'b', 'filled', 'MarkerFaceAlpha', 0.5); % 青
hold off点が密集している領域では、後から描画した青い点が赤い点の上に重なります。
透明度を設定していても、全体として青い点が強く見える場合があります。
scatter3 と view(2) を使った対処法
一つの実用的な方法は、各点に表示用の z 座標を追加することです。
rng(0) % 同じ表示を再現したい場合に指定
z1 = rand(length(x1), 1);
z2 = rand(length(x2), 1);
figure;
hold on
scatter3(x1, y1, z1, 50, 'r', 'filled', ...
'MarkerFaceAlpha', 0.5); % 赤
scatter3(x2, y2, z2, 50, 'b', 'filled', ...
'MarkerFaceAlpha', 0.5); % 青
hold off
view(2)scatter3 は三次元散布図を作成する関数です。
ここでは、分析対象のデータとは別に、ランダムな z 座標を追加しています。最後に view(2) を実行すると、二次元の視点で表示されます。
見た目は通常の x-y 散布図に近いままですが、描画時の前後関係が分散されます。これにより、一方の系列だけが常に奥に隠れる状態を和らげられます。

コードのポイント
z 座標は表示用の値
z1 = rand(length(x1), 1);今回の z 座標には、分析上の意味はありません。点の前後関係を分散させるための仮の値です。
view(2) で二次元表示に戻す
view(2)view(2) を指定すると、三次元座標を使ったグラフを二次元の視点で表示できます。
rng で表示を再現する
乱数をそのまま使うと、実行するたびに点の前後関係が変わります。
資料や報告書で同じ図を再現したい場合は、乱数シードを固定しておくと扱いやすくなります。
rng(0)使用時の注意点
今回の方法は、重なった点を見やすくするための工夫です。仮の z 座標を使っているため、z 軸を実データとして解釈しないよう注意が必要です。
用途によっては、次の方法も検討するとよいでしょう。
- マーカーサイズを小さくする
MarkerFaceAlphaの値を調整する- 系列ごとにグラフを分ける
- 密度表示やヒートマップを併用する
- 表示上の工夫を注記する
まとめ
二群の散布図を重ねると、描画順によって後から描いた系列が目立ちやすくなる場合があります。
scatter3 でランダムな z 座標を追加し、view(2) で二次元表示に戻すと、片方の系列だけが隠れ続ける状態を和らげられます。
可視化の目的に応じて、透明度やマーカーサイズの調整と組み合わせることも有効です。
よくある質問
scatter の透明度を下げるだけでは不十分ですか?
用途によっては十分です。ただし、点が密集している場合は、後から描画した系列が目立ちやすい状態が残ることがあります。
z 座標に意味はありますか?
今回の z 座標は表示用の乱数です。分析対象のデータではありません。
毎回同じ表示にできますか?
rng(0) のように乱数シードを固定すると、同じ z 座標を再現できます。
必ずこの方法を使うべきですか?
いいえ。グラフの用途に応じて、透明度の調整、グラフの分割、密度表示なども検討してください。
おわりに
散布図は手軽に作成できますが、点の重なり方によって見え方が変わることがあります。
データの見せ方に迷った場合や、既存のMATLABコードを整理したい場合は、SCISELでもコードレビューや部分的なサポートを行っています。身近に相談できる方がいない場合には、お力になれることがあるかもしれません。
SCISEL
MATLAB LabVIEWで困った方へ 支援・代行により研究や開発のサポートを行います
