1. ホーム
  2. python

[解決済み] Pythonによる散布図とカラーマッピング

2022-11-11 16:58:38

質問

私はnumpyの配列に格納された点xとyの範囲を持っています。 これらは、t=0...T-1におけるx(t)とy(t)を表しています。

を用いて散布図を描画しています。

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()

時間を表すカラーマップを持ちたい(そのため、numpy配列のインデックスに応じてポイントに色をつける)。

これを行うための最も簡単な方法は何ですか?

どのように解決するのですか?

以下はその例です。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)
t = np.arange(100)

plt.scatter(x, y, c=t)
plt.show()

ここでは、インデックスを元に色を設定しています。 t の配列である [1, 2, ..., 100] .

おそらく、より理解しやすい例として、もう少し単純な

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
plt.scatter(x, y, c=t)
plt.show()

<イグ

として渡す配列は c として渡す配列は、特定の順序や型である必要はありません。つまり、これらの例のようにソートや整数である必要はありません。 プロットルーチンは、カラーマップのスケールを c の最小/最大値がカラーマップの底/頂点に対応するようにスケールします。

カラーマップ

カラーマップを変更するには

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)

インポート matplotlib.cm としてカラーマップを呼び出すことができるため、オプションとなります。 cmap="cmap_name" と同じように呼び出すことができるからです。 そこには 参照ページ に、それぞれのカラーマップがどのようなものかを示す参考ページがあります。 また、カラーマップを反転させるには、単に cmap_name_r . つまり

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")

が動作します。 例としては "jet_r" または cm.plasma_r . 新しい1.5カラーマップviridisを使った例です。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
plt.show()

カラーバー

カラーバーを追加するには

plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()

なお、図やサブプロットを明示的に使用する場合(例えば fig, ax = plt.subplots() または ax = fig.add_subplot(111) など)、カラーバーを追加するのはもう少し複雑です。良い例があります ここで、単一のサブプロットカラーバーについて 2つのサブプロット、1つのカラーバーの場合はこちら .