はじめに
このチュートリアルでは、Matplotlib の Line2D の markevery プロパティを使って、データポイントのサブセットにマーカーを描画する方法を説明します。マーカーを指定するさまざまな方法、整数、タプル、リスト、スライス、および浮動小数点数を使った方法をカバーします。また、線形および対数スケール、ズームインおよび極座標プロットでの markevery の動作についても説明します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習します。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
データポイントを定義する
まず、プロットに使用するデータポイントを定義します。この例では、numpy を使ってサイン波の一連の x と y の値を生成します。
import matplotlib.pyplot as plt
import numpy as np
## プロットする markevery のケースのリストを定義する
cases = [
None,
8,
(30, 8),
[16, 24, 32],
[0, -1],
slice(100, 200, 3),
0.1,
0.4,
(0.2, 0.4)
]
## データポイント
delta = 0.11
x = np.linspace(0, 10 - 2 * delta, 200) + delta
y = np.sin(x) + 1.0 + delta
線形スケールでプロットを作成する
次に、線形スケールで markevery がどのように動作するかを示すために、サブプロットのセットを作成します。cases リストを反復処理し、各ケースを個別のサブプロットにプロットします。マークするデータポイントを指定するために markevery パラメータを使用します。
## 線形スケールでプロットを作成する
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
対数スケールでプロットを作成する
前のステップを繰り返しますが、今回は対数スケールを使用します。対数スケールは、整数ベースのサブサンプリングにおいてマーカー間隔に視覚的な非対称性を引き起こしますが、分数ベースのサブサンプリングでは均等な分布が生成されます。
## 対数スケールでプロットを作成する
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.set_xscale('log')
ax.set_yscale('log')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
ズームインしたプロットを作成する
今度は、ズームインしたプロットで markevery がどのように動作するかを示すために、もう一組のサブプロットを作成します。整数ベースのサブサンプリングは、元のデータからポイントを選択し、ビューとは独立していることに注目してください。一方、浮動小数点数ベースのサブサンプリングは Axes の対角線に関連しており、表示されるデータ範囲を変更します。
## ズームインしたプロットを作成する
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
ax.set_xlim((6, 6.7))
ax.set_ylim((1.1, 1.7))
極座標プロットを作成する
最後に、極座標プロットで markevery がどのように動作するかを示すために、サブプロットのセットを作成します。その動作は線形スケールの場合と似ていることに注目してください。
## 極座標プロットを作成する
r = np.linspace(0, 3.0, 200)
theta = 2 * np.pi * r
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained',
subplot_kw={'projection': 'polar'})
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(theta, r, 'o', ls='-', ms=4, markevery=markevery)
まとめ
このチュートリアルでは、Matplotlib の Line2D の markevery プロパティを使用して、データポイントのサブセットにマーカーを描画する方法を学びました。整数、タプル、リスト、スライス、浮動小数点数を使用するなど、マーカーを指定するさまざまな方法を検討しました。また、線形および対数スケール、ズームインしたプロット、極座標プロットでの markevery の動作も見てみました。