Pythonでの散布図とカラーマッピング


91

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

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

import matplotlib.pyplot as plt

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

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

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

回答:


169

これが例です

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カラーバーについてはここにあります


1
plt.colorbar()コマンドを使用して、色の凡例を取得できます。
drevicko 2015

コードがここで変更されたようです。cmap= cm.colormap_nameはcmap = cm.cmapnameになります。
クリス

@ cmarti1138私はあなたが何を意味するかないよ、cm.colormap_namecm.cmapnameの実際の変数はありませんmatplotlib.cm。それだけのための擬似コードだcm.jetcm.veridis_rなど、
wflynny

すでにプロットされた曲線のcmapまたはcリストを変更する方法はありますか?
Guimoute

10

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

例:

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

または代わりに、

plt.scatter(x, y, c=t, cmap='jet')

3

サブプロットカラーバー

スキャッターのあるサブプロットの場合、2番目の図を使用して「マップ可能」を作成し、それを元のプロットに追加することで、カラーバーを軸に騙すことができます。

上記の例の続きとして:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
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')


# Build your secondary mirror axes:
fig2, (ax3, ax4) = plt.subplots(1, 2)

# Build maps that parallel the color-coded data
# NOTE 1: imshow requires a 2-D array as input
# NOTE 2: You must use the same cmap tag as above for it match
map1 = ax3.imshow(np.stack([t, t]),cmap='viridis')
map2 = ax4.imshow(np.stack([t, t]),cmap='viridis_r')

# Add your maps onto your original figure/axes
fig.colorbar(map1, ax=ax1)
fig.colorbar(map2, ax=ax2)
plt.show()

COLORBARでサブプロットを分散させる

無視できる二次図も出力することに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.