Matplotlib で多彩な線を作成する

PythonPythonBeginner
今すぐ練習

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

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

はじめに

この実験では、Matplotlib で多彩な線を作成する方法を学びます。LineCollection 関数を使って線分のセットを作成し、それぞれの微分に基づいて個別に色付けします。また、境界ノルムを使って線分を色付ける方法も学びます。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

学習中に問題があった場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("Importing Matplotlib") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") python/BasicConceptsGroup -.-> python/booleans("Booleans") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills matplotlib/importing_matplotlib -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} matplotlib/figures_axes -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/booleans -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/lists -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/tuples -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/build_in_functions -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/importing_modules -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/numerical_computing -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} python/data_visualization -.-> lab-48836{{"Matplotlib で多彩な線を作成する"}} end

ライブラリのインポート

この実験に必要なライブラリをインポートして始めましょう。matplotlib.pyplotnumpy をインポートします。

import matplotlib.pyplot as plt
import numpy as np

データの作成

0 から 3π の間に等間隔で分布する 500 個の値を含む numpy 配列 x を作成します。また、x の値のサインを含む別の numpy 配列 y も作成します。最後に、y の 1 階微分を含む numpy 配列 dydx を作成します。

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))

線分の作成

それぞれに色付けを行うことができるように、線分のセットを作成します。2 つの配列 points[:-1]points[1:] を 2 次元目の軸に沿って連結するために、numpy の concatenate 関数を使用します。その後、得られた配列を N x 1 x 2 の配列に整形して、点を簡単に積み重ねて線分を取得できるようにします。線のコレクション用の segments 配列は、(numlines) x (1 本の線あたりの点数) x 2(x と y のため)でなければなりません。

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

連続ノルムの作成

データポイントから色にマッピングするための連続ノルムを作成します。matplotlib.pyplotNormalize 関数を使って、dydx の値をその最小値と最大値の間で正規化します。その後、LineCollection 関数を使って線分のセットを作成し、それぞれの微分に基づいて個別に色付けします。カラーマッピングに使用する値を設定するために set_array 関数を使います。

norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

カラーバーの作成

色と dydx の値の間のマッピングを示すためにカラーバーを作成します。matplotlib.pyplotcolorbar 関数を使ってカラーバーを作成します。

line = plt.gca().add_collection(lc)
plt.colorbar(line)

境界ノルムを使用する

代わりに境界ノルムを使用して線分を色付けします。赤色、緑色、青色の 3 色を含む ListedColormap を作成します。その後、境界値 -1、-0.5、0.5、および 1 と ListedColormap を持つ BoundaryNorm を作成します。カラーマッピングに使用する値を設定するために set_array 関数を使います。

cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

サブプロットの作成

色付けされた線分を表示するためにサブプロットを作成します。matplotlib.pyplotsubplots 関数を使って、2x1 のサブプロットのグリッドを作成し、sharex および sharey パラメータを使ってサブプロット間で x 軸と y 軸を共有します。

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])

軸の範囲を設定する

サブプロットの x 軸と y 軸の範囲を設定します。

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)

グラフを表示する

matplotlib.pyplotshow 関数を使ってグラフを表示します。

plt.show()

まとめ

この実験では、Matplotlib で多彩な線を作成する方法を学びました。LineCollection 関数を使って線分のセットを作成し、それらの微分に基づいて個別に色付けしました。また、境界ノルムを使って線分を色付ける方法も学びました。Normalize 関数を使って dydx の値をその最小値と最大値の間で正規化し、ListedColormap 関数を使って赤色、緑色、青色の 3 色のカラーマップを作成しました。BoundaryNorm 関数を使って境界値 -1、-0.5、0.5、および 1 と ListedColormap を持つ境界ノルムを作成しました。最後に、subplots 関数を使って 2x1 のサブプロットのグリッドを作成し、sharex および sharey パラメータを使ってサブプロット間で x 軸と y 軸を共有しました。その後、show 関数を使ってグラフを表示しました。