107

ポイント x と y の範囲が numpy 配列に格納されています。これらは x(t) と y(t) を表し、ここで t=0...T-1

を使用して散布図をプロットしています

import matplotlib.pyplot as plt

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

時間を表すカラーマップが必要です(したがって、numpy 配列のインデックスに応じてポイントを色付けします)

そうする最も簡単な方法は何ですか?

4

4 に答える 4

197

ここに例があります

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()

ここに画像の説明を入力

as として渡す配列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()

ここに画像の説明を入力

Figureとサブプロットを明示的に使用している場合 (例:fig, ax = plt.subplots()またはax = fig.add_subplot(111))、カラーバーの追加はもう少し複雑になる可能性があることに注意してください。単一のサブプロット カラーバーの場合はこちら、2 つのサブプロット 1 カラーバーの場合はこちらで良いを見つけることができます。

于 2013-07-16T16:45:31.200 に答える
10

上記のwflynnyの回答に追加するには、利用可能なカラーマップをここで見つけることができます

例:

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

または代わりに、

plt.scatter(x, y, c=t, cmap='jet')
于 2015-10-30T01:33:56.177 に答える