ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
散布図とは
散布図 (Scatter Plot) は、2 つの量的変数の関係を 点の位置で表現するグラフです。データ分析の最初の一歩として「2 変数の相関を眺める」用途で最頻出します。
最小コード
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータ
rng = np.random.default_rng(0)
x = rng.normal(0, 1, 100)
y = 2 * x + rng.normal(0, 1, 100)
plt.scatter(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot')
plt.show()
主なパラメータ
| 引数 | 意味 | 例 |
|---|---|---|
s | 点のサイズ (面積、ポイント^2) | s=50 / s=values |
c | 点の色 (文字列 / RGB / 数値配列) | c='red' / c=z |
cmap | カラーマップ (c が数値のとき) | cmap='viridis' |
marker | マーカー記号 | 'o' 〇 / '^' △ / 's' □ / '*' ★ |
alpha | 透明度 (0=完全透明、1=不透明) | alpha=0.5 |
edgecolors | 点の縁の色 | edgecolors='black' |
linewidths | 縁の太さ | linewidths=0.5 |
label | 凡例用ラベル | label='Group A' |
サイズと色で多次元を表現
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng(1)
n = 200
x = rng.uniform(0, 10, n)
y = rng.uniform(0, 10, n)
size = rng.uniform(10, 200, n) # 各点の大きさ
color = rng.uniform(0, 1, n) # 各点の色 (連続値)
plt.figure(figsize=(7, 5))
plt.scatter(x, y, s=size, c=color, cmap='viridis', alpha=0.7, edgecolors='black')
plt.colorbar(label='Value')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter (size + color encoded)')
plt.show()
これで (x, y, サイズ, 色) の 4 軸を 1 つの図に詰め込めます。Hans Rosling 型のバブルチャート (国×GDP×人口×大陸) もこのパターン。
複数系列を重ねる
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng(2)
plt.figure(figsize=(7, 5))
plt.scatter(rng.normal(0, 1, 50), rng.normal(0, 1, 50),
c='tomato', marker='o', alpha=0.7, label='Group A')
plt.scatter(rng.normal(2, 1, 50), rng.normal(1, 1, 50),
c='royalblue', marker='^', alpha=0.7, label='Group B')
plt.scatter(rng.normal(-1, 0.5, 50), rng.normal(-2, 0.5, 50),
c='seagreen', marker='s', alpha=0.7, label='Group C')
plt.legend(loc='upper left')
plt.title('3 Groups')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(alpha=0.3)
plt.show()
マーカー一覧
| 記号 | 形状 | 記号 | 形状 |
|---|---|---|---|
'.' | 小さい点 | '^' | 上向き三角 |
'o' | ○ 円 | 'v' | 下向き三角 |
'x' | × バツ | '<' / '>' | 横三角 |
'+' | + プラス | 's' | □ 四角 |
'*' | ★ 星 | 'd' / 'D' | 菱形 (細/太) |
'p' | 五角形 | 'h' / 'H' | 六角形 |
大量データ: 密度散布図
数万〜数十万点を scatter でそのまま描くと、点が重なって真っ黒な塊になります。密度を見える化するには:
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng(3)
x = rng.normal(0, 1, 50000)
y = rng.normal(0, 1, 50000)
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# 1. scatter (alpha 小)
axes[0].scatter(x, y, s=2, alpha=0.05)
axes[0].set_title('scatter (alpha=0.05)')
# 2. hexbin (六角ビン)
hb = axes[1].hexbin(x, y, gridsize=40, cmap='Blues')
fig.colorbar(hb, ax=axes[1])
axes[1].set_title('hexbin')
# 3. hist2d (矩形ビン)
h = axes[2].hist2d(x, y, bins=40, cmap='Greens')
fig.colorbar(h[3], ax=axes[2])
axes[2].set_title('hist2d')
plt.tight_layout()
plt.show()
回帰直線・近似曲線の重ね描き
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng(4)
x = rng.uniform(0, 10, 80)
y = 2.5 * x + 3 + rng.normal(0, 4, 80)
# 1 次回帰
a, b = np.polyfit(x, y, 1)
xs = np.linspace(0, 10, 100)
ys = a * xs + b
plt.scatter(x, y, alpha=0.6, label='Data')
plt.plot(xs, ys, color='red', label=f'y = {a:.2f}x + {b:.2f}')
plt.legend()
plt.title('Scatter with regression line')
plt.show()
Seaborn での散布図
カテゴリ別の色分けや回帰線の重ね描きは Seaborn が圧倒的に簡潔です。
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
# 種類で色分け
sns.scatterplot(data=iris, x='sepal_length', y='petal_length',
hue='species', style='species', size='petal_width',
sizes=(20, 200), alpha=0.7)
plt.title('Iris Scatter')
plt.show()
# 回帰線付き
sns.lmplot(data=iris, x='sepal_length', y='petal_length',
hue='species', height=5, aspect=1.2)
plt.show()
# ペアプロット (全列の散布図行列)
sns.pairplot(iris, hue='species', diag_kind='kde')
plt.show()
3D 散布図
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D # noqa: F401
rng = np.random.default_rng(5)
x = rng.normal(0, 1, 200)
y = rng.normal(0, 1, 200)
z = rng.normal(0, 1, 200)
c = x + y + z
fig = plt.figure(figsize=(7, 6))
ax = fig.add_subplot(111, projection='3d')
sc = ax.scatter(x, y, z, c=c, cmap='plasma', s=30)
fig.colorbar(sc, label='x+y+z')
ax.set_xlabel('X'); ax.set_ylabel('Y'); ax.set_zlabel('Z')
ax.set_title('3D Scatter')
plt.show()
カラーマップ早見
| 分類 | 例 | 用途 |
|---|---|---|
| Sequential (連続) | viridis / plasma / Blues / Greens | 0 → 大 へ滑らかに変化する値 |
| Diverging (発散) | RdBu / coolwarm / PiYG | 0 を中心に正負へ広がる値 |
| Qualitative (定性) | tab10 / Set1 / Paired | カテゴリ (連続性なし) |
| Cyclic (循環) | twilight / hsv | 角度・時刻・位相 |
色覚多様性 (色弱) への配慮として viridis 系が推奨されます (古典の jet は非推奨)。
FAQ
Q: plt.plot(x, y, 'o') でも散布図が描けますが scatter と何が違いますか?
A: plot は全点で同じサイズ・色。scatter は 点ごとに s/c を変えられるのが本質的違いです。少量で同色なら plot の方が速い場合あります。
Q: 点を見えないほどに重ねたい (heatmap 化)
A: alpha=0.05 程度を試し、それでも見にくければ hexbin / hist2d または seaborn.kdeplot() による密度推定をどうぞ。
Q: ラベル (テキスト) を点ごとに付けたい
A: ループで plt.annotate(label, (x, y)) を呼びます。点が密集している場合は adjustText ライブラリで自動回避できます。
Q: log スケールにしたい
A: plt.xscale('log') / plt.yscale('log')。指数的に広がるデータ (PV数 / 売上 等) で必須です。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?