Matplotlib マーカーのカスタマイズ チュートリアル

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、Matplotlib の Line2Dmarkevery プロパティを使って、データポイントのサブセットにマーカーを描画する方法を説明します。マーカーを指定するさまざまな方法、整数、タプル、リスト、スライス、および浮動小数点数を使った方法をカバーします。また、線形および対数スケール、ズームインおよび極座標プロットでの 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 の Line2Dmarkevery プロパティを使用して、データポイントのサブセットにマーカーを描画する方法を学びました。整数、タプル、リスト、スライス、浮動小数点数を使用するなど、マーカーを指定するさまざまな方法を検討しました。また、線形および対数スケール、ズームインしたプロット、極座標プロットでの markevery の動作も見てみました。