Matplotlib を使った効率的な線の描画

PythonPythonBeginner
オンラインで実践に進む

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

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

はじめに

このチュートリアルでは、Matplotlib のLineCollection関数を使って一度に複数の線を効率的に描画する方法を学びます。異なる色とスタイルで複数の線をプロットする方法と、マスク配列を使って一部の値をマスクする方法を見ていきます。また、値の配列を色にマッピングするためのScalarMappable.set_array関数の使い方も学びます。

VM のヒント

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

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

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

ライブラリのインポート

始める前に、必要なライブラリをインポートする必要があります。matplotlib.pyplotnumpy を使います。

import matplotlib.pyplot as plt
import numpy as np

データの作成

次に、線を描画するために使うデータを作成する必要があります。numpy を使って xy の値の 2 次元配列を作成します。

x = np.arange(100)
ys = x[:50, np.newaxis] + x[np.newaxis, :]

線コレクションの作成

ここで、LineCollection関数を使ってLineCollectionオブジェクトを作成できます。linewidthscolorslinestyleパラメータを設定することで、線の外観をカスタマイズできます。

colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

segs = np.zeros((50, 100, 2))
segs[:, :, 1] = ys
segs[:, :, 0] = x

segs = np.ma.masked_where((segs > 50) & (segs < 60), segs)

line_segments = LineCollection(segs, linewidths=(0.5, 1, 1.5, 2),
                               colors=colors, linestyle='solid')

プロットの作成

これで、matplotlibを使ってプロットを作成し、Axesオブジェクトのadd_collectionメソッドを使ってLineCollectionオブジェクトをプロットに追加できます。

fig, ax = plt.subplots()
ax.set_xlim(x.min(), x.max())
ax.set_ylim(ys.min(), ys.max())

ax.add_collection(line_segments)
ax.set_title('Line collection with masked arrays')
plt.show()

値に色をマッピングする

ScalarMappable.set_array関数を使って、値の配列を色にマッピングすることもできます。新しいデータセットと新しいLineCollectionオブジェクトを作成し、arrayパラメータをx値に設定します。その後、Figureオブジェクトのcolorbarメソッドを使って、プロットにカラーバーを追加します。

N = 50
x = np.arange(N)
ys = [x + i for i in x]
segs = [np.column_stack([x, y]) for y in ys]

fig, ax = plt.subplots()
ax.set_xlim(np.min(x), np.max(x))
ax.set_ylim(np.min(ys), np.max(ys))

line_segments = LineCollection(segs, array=x,
                               linewidths=(0.5, 1, 1.5, 2),
                               linestyles='solid')
ax.add_collection(line_segments)
axcb = fig.colorbar(line_segments)
axcb.set_label('Line Number')
ax.set_title('Line Collection with mapped colors')
plt.sci(line_segments)
plt.show()

まとめ

このチュートリアルでは、Matplotlib のLineCollection関数を使って一度に複数の線を効率的に描画する方法を学びました。異なる色とスタイルで複数の線を描画する方法と、マスク配列を使って一部の値をマスクする方法を見ました。また、ScalarMappable.set_array関数を使って値の配列を色にマッピングする方法も学びました。