1. ホーム
  2. python

[解決済み] matplotlib の散布図用カラーバー

2022-10-28 10:50:44

質問

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

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

matplotlibの散布図に関するドキュメントより 1 :

cmap は c が浮動小数点数の配列の場合のみ使用されます。

ですから、colorlistは、あなたが今持っているようなタプルのリストではなく、floatのリストである必要があります。 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()

<イグ