web-dev-qa-db-ja.com

散布図のmatplotlibカラーバー

X、y、cの3つのプロットパラメーターを持つデータを持つデータを使用しています。散布図のカスタムカラー値をどのように作成しますか?

これを拡張する 私はやろうとしている:

import matplotlib
import matplotlib.pyplot as plt
cm = matplotlib.cm.get_cmap('RdYlBu')
colors=[cm(1.*i/20) for i in range(20)]
xy = range(20)
plt.subplot(111)
colorlist=[colors[x/2] for x in xy] #actually some other non-linear relationship
plt.scatter(xy, xy, c=colorlist, s=35, vmin=0, vmax=20)
plt.colorbar()
plt.show()

しかし、結果はTypeError: You must first set_array for mappable

68
Adam Greenhall

散布に関するmatplotlibドキュメントから 1

cmapは、cがfloatの配列である場合にのみ使用されます

したがって、colorlistは、現在のタプルのリストではなく、フロートのリストである必要があります。 plt.colorbar()は、plt.scatter()が返すCircleCollectionのようなマップ可能なオブジェクトを必要とします。 vminとvmaxは、カラーバーの制限を制御できます。 vmin/vmax以外のものは、エンドポイントの色を取得します。

これはどのように機能しますか?

import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

Image Example

169
matt

2つの変数で散布し、3番目の変数で色分けする場合は、 Altair が最適です。

データセットを作成する

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(40*np.random.randn(10, 3), columns=['A', 'B','C'])

アルタイルプロット

from altair import *
Chart(df).mark_circle().encode(x='A',y='B', color='C').configure_cell(width=200, height=150)

Plot

enter image description here

3
Nipun Batra

ここに OOP way カラーバーを追加する:

fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)
2
neurite