散乱用のmatplotlibカラーバー


89

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

回答:


196

scatter 1のmatplotlibドキュメントから:

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

したがって、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()

画像の例


試してみました'AxesSubplot' object has no attribute 'colorbar'。私はやったax.colorbar()...私は何が間違っているのですか?
ルーカスアイマレット2018年

この例では、matplotlib OOPインターフェースを使用する場合の明確なアプリケーションは提供されていません:matplotlib.org/gallery/api/agg_oo_sgskip.html
Ryszard Cetnarski 2018

18

ここでOOPの道カラーバーを追加するには:

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

これを行うと、プロットが完全に再スケーリングされ、すべてのポイントが右端のプロットのスライバー内にあり、カラーバーが下部を横切る非常に細い線になります。
火星

正しい答えは、pltカラーバーをプロットするために直接使用することは、私が考える推奨される方法ではありません。あなたは称賛された方法です。
GoingMyWay

2

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'])

Altairプロット

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

プロット

ここに画像の説明を入力してください

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