Pandas & NumPy Academy · レッスン

折れ線グラフと散布図

ax.plot()で連続データを、ax.scatter()で離散的な点をプロットし、色、マーカー、線のスタイルを制御します。

レッスン 2/413 ステップ

「折れ線グラフと散布図」はCoddyKit上の無料Pandas & NumPy Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPandas & NumPy Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Pandas & NumPy Academyコースには全4レッスンが含まれています。

折れ線グラフと散布図: 基本的なプロット形式

折れ線グラフは連続するデータ点を線で結び、時間の経過に伴う傾向や連続関数の可視化に適しています。散布図はデータ点を線で結ばずに個別に描画するため、2つの数値変数の関係を調べるのに適しています。どちらもMatplotlibのAxesオブジェクト上に作成し、折れ線にはax.plot()、散布点にはax.scatter()を使います。

折れ線グラフにax.plot()を使う

ax.plot(x, y)は、データ点を順番に結ぶ線を描画します。xの値を第1引数、yの値を第2引数として渡します。どちらにもPythonのリスト、NumPy配列、Pandas Seriesを使用できます。引数を1つだけ渡した場合、Matplotlibはインデックス(0、1、2、...)をx軸として自動的に使用します。このメソッドはLine2D Artistオブジェクトのリストを返します。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y)  # basic line plot
ax.set_title('Sine Wave')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
# plt.show()
plt.close()

線のスタイルと色を制御する

ax.plot()でよく使うキーワード引数は次のとおりです。color(名前、16進数、またはRGBタプル)、linewidth(またはlw)、linestyle(またはls): '-'は実線、'--'は破線、':'は点線、'-.'は一点鎖線です。また、marker(各データ点に表示する形状)とmarkersizeもあります。linestyleとmarkerを組み合わせると、線と個々のデータ点を同時に表示できます。

fig, ax = plt.subplots(figsize=(7, 4))

# Solid blue line with circle markers
ax.plot(x, np.sin(x), color='steelblue', lw=2, ls='-',
        marker='o', markersize=4, label='sin(x)')

# Dashed red line
ax.plot(x, np.cos(x), color='crimson', lw=1.5, ls='--', label='cos(x)')

ax.legend()
plt.close()

複数の線を描画する

同じAxes上に複数の線を重ねるには、ax.plot()を複数回呼び出します。Matplotlibはデフォルトのカラーパレットから色を自動的に切り替えます。各線に必ずlabelキーワードを渡しておくと、ax.legend()で自動的にラベルを付けられます。すべての線を凡例に含めるため、凡例の呼び出しはすべてのプロット呼び出しの後に配置してください。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
dates = pd.date_range('2024-01', periods=12, freq='ME')
fig, ax = plt.subplots(figsize=(8, 4))

for product in ['A', 'B', 'C']:
    sales = np.random.randint(50, 200, 12)
    ax.plot(dates, sales, marker='o', label=f'Product {product}')

ax.set_title('Monthly Sales by Product')
ax.legend()
plt.close()

Pandas DataFrameを直接描画する

Pandas DataFrameには.plot()メソッドがあり、Matplotlibのグラフを直接作成できます。既存のAxesオブジェクト上に描画するには、ax=axを渡します。df.plot(ax=ax)は、DataFrameのインデックスをx軸として、すべての列を個別の線で描画します。その後もaxオブジェクトに対して、Matplotlibのカスタマイズをすべて適用できます。

df = pd.DataFrame(
    np.random.randn(12, 3),
    index=pd.date_range('2024', periods=12, freq='ME'),
    columns=['North', 'South', 'West']
).cumsum()

fig, ax = plt.subplots(figsize=(8, 4))
df.plot(ax=ax, linewidth=1.5)
ax.set_title('Cumulative Revenue by Region')
ax.set_ylabel('Revenue (cumulative)')
plt.close()

散布図にax.scatter()を使う

ax.scatter(x, y)は、データ点を線で結ばずに個別に描画します。ax.plot()とは異なり、scatterはデータが順序付けられていることを前提としません。主なパラメータは次のとおりです。c(色。点ごとの色を指定する配列も使用可能)、s(点のサイズ。配列も使用可能)、cmap(cが数値の場合に使うカラーマップ)、alpha(重なった点を扱うための透明度。0〜1)。

np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)

fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, color='steelblue', alpha=0.6, s=40)
ax.set_xlabel('Feature X')
ax.set_ylabel('Target Y')
ax.set_title('Feature vs Target')
plt.close()

カテゴリ別に散布点を色分けする

cパラメータに数値配列を渡し、cmapカラーマップを指定すると、3つ目の変数に応じて散布点を色分けできます。plt.colorbar(scatter_obj)でカラーバーを追加すると、値のスケールを示せます。さらに4つ目の変数に応じてs(サイズ)も変化させる場合、この手法はバブルチャートの一種と呼ばれます。

categories = np.random.choice([0, 1, 2], size=100)

fig, ax = plt.subplots(figsize=(6, 5))
scatter = ax.scatter(x, y, c=categories, cmap='Set1',
                     alpha=0.7, s=60, edgecolors='none')
fig.colorbar(scatter, ax=ax, label='Category')
ax.set_title('Scatter Coloured by Category')
plt.close()

トレンドラインを追加する

近似したトレンドラインを散布図に追加すると、個々のデータ点と全体的な傾向の両方を表現できます。np.polyfit(x, y, 1)で線形近似を計算し、np.poly1d(coeffs)(x_range)で評価して、結果をax.plot()で散布図の上に重ねます。トレンドラインはデータ点と区別できるように、細くし、異なるスタイルにする必要があります。

fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, alpha=0.4, s=30, color='steelblue', label='Data')

# Fit and plot linear trend line
coeffs = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
y_line = np.poly1d(coeffs)(x_line)
ax.plot(x_line, y_line, color='red', lw=2, label='Linear fit')

ax.legend()
ax.set_title('Scatter with Trend Line')
plt.close()

fill_betweenで信頼帯を塗りつぶす

ax.fill_between(x, y_lower, y_upper)は、2本の曲線の間の領域を塗りつぶします。平均線の周りの信頼区間、標準偏差の帯、最小値と最大値の範囲などを示すためによく使われます。alphaを指定して塗りつぶしを半透明にすると、下にあるデータも見える状態にできます。

x_range = np.linspace(0, 2 * np.pi, 100)
mean = np.sin(x_range)
upper = mean + 0.2
lower = mean - 0.2

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_range, mean, color='steelblue', lw=2, label='Mean')
ax.fill_between(x_range, lower, upper,
                color='steelblue', alpha=0.2, label='±0.2 band')
ax.legend()
ax.set_title('Line with Confidence Band')
plt.close()

軸の範囲とグリッド線

ax.set_xlim(min, max)とax.set_ylim(min, max)で表示範囲を制御します。ax.grid(True)でグリッド線を有効にできます。グリッドはキーワード引数linestyle、linewidth、alphaでカスタマイズできます。alpha=0.3の控えめなグリッドを使うと、グラフを煩雑にせず正確な値を読み取りやすくなります。ax.set_axisbelow(True)を呼び出すと、データ点の背後にグリッドを描画できます。

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, np.sin(x), 'b-', lw=2)

ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.2, 1.2)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_axisbelow(True)  # grid behind data
ax.set_title('Sine with Grid')
plt.close()

Alphaとオーバープロット

散布図の同じ領域に多くのデータ点が重なると、個々の点が見えなくなります。これはオーバープロットと呼ばれます。最も簡単な対策は、alphaで不透明度を下げることです(0.0 = 完全に透明、1.0 = 完全に不透明)。alpha=0.3以下に設定すると、半透明の点が重なるため密集した領域は暗く見え、点の少ない領域は明るいままになります。数百万点のような非常に大きなデータセットでは、代わりにhexbinやカーネル密度推定を検討してください。

np.random.seed(1)
x_dense = np.random.randn(1000)
y_dense = np.random.randn(1000)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))

# Without alpha: overplotting hides density
ax1.scatter(x_dense, y_dense, s=10)
ax1.set_title('No alpha (overplotted)')

# With alpha: density visible
ax2.scatter(x_dense, y_dense, s=10, alpha=0.2)
ax2.set_title('alpha=0.2 (density visible)')

plt.tight_layout()
plt.close()

理解度チェック

このレッスンで学んだMatplotlibの折れ線グラフと散布図について理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、ax.plot()で色、線のスタイル、マーカーを完全に制御した折れ線グラフを作成できること、ax.scatter()でcとsを使って点ごとの色とサイズを指定した散布図を作成できること、ax.fill_between()で信頼帯を追加できること、そしてax.grid()で読みやすさを高めるグリッド線を追加できることを学びました。次は、カテゴリデータと分布データを可視化するために、棒グラフとヒストグラムを作成します。

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「折れ線グラフと散布図」レッスンは無料ですか?

はい。「折れ線グラフと散布図」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Pandas & NumPy Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Pandas & NumPy Academyコースには全4レッスンが含まれています。

「折れ線グラフと散布図」で何を学びますか?

ax.plot()で連続データを、ax.scatter()で離散的な点をプロットし、色、マーカー、線のスタイルを制御します。 ブラウザで直接実行するハンズオンコードでPandas & NumPy Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Pandas & NumPy Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPandas & NumPy Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「折れ線グラフと散布図」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPandas & NumPy Academyレッスンでコードを書いて実行できますか?

はい。すべてのPandas & NumPy Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. FigureとAxesの構造
  2. 折れ線グラフと散布図
  3. 棒グラフとヒストグラム
  4. ラベル、タイトル、図の保存
← Pandas & NumPy Academyに戻る