Seabornのlmplotのスキャッタポイントの色に第3の変数をマップしようとしています。したがって、x上のtotal_bill
,tip
上のyおよび点の色は、size
の関数である。Seabornのlmplotでファセットに異なる散乱kwargsを渡す方法
ファセットが有効になっていないときに機能しますが、カラー配列のサイズが各ファセットにプロットされたデータのサイズと一致しないため、col
を使用すると失敗します。
これは、上記の私のコード
import matplotlib as mpl
import seaborn as sns
sns.set(color_codes=True)
# load data
data = sns.load_dataset("tips")
# size of data
print len(data.index)
### we want to plot scatter point colour as function of variable 'size'
# first, sort the data by 'size' so that high 'size' values are plotted
# over the smaller sizes (so they are more visible)
data = data.sort_values(by=['size'], ascending=True)
scatter_kws = dict()
cmap = mpl.cm.get_cmap(name='Blues')
# normalise 'size' variable as float range needs to be
# between 0 and 1 to map to a valid colour
scatter_kws['c'] = data['size']/data['size'].max()
# map normalised values to colours
scatter_kws['c'] = cmap(scatter_kws['c'].values)
# colour array has same size as data
print len(scatter_kws['c'])
# this works as intended
g = sns.lmplot(data=data, x="total_bill", y="tip", scatter_kws=scatter_kws)
でうまく機能して(画像を含めることが許さまだ、ので、ここでは、リンクのない)以下を生成します:ときに私、
lmplot with point colour as function of size
しかし、 col='sex'
をlmplot(以下のコードを試してください)に追加すると、カラー配列のデータセットのサイズが各ファセットにプロットされたデータのサイズよりも大きくなるという問題があります。したがって、例えばcol='male'
には157のデータポイントがあるので、カラー配列からの最初の157の値はポイントにマッピングされます(そしてこれらも正しいものではありません)。下記参照:
lmplot with point colour as function of size
with col=sex
g = sns.lmplot(data=data, x="total_bill", y="tip", col="sex", scatter_kws=scatter_kws)
理想的には、私は各ファセットが(私はlmplotに渡す前に計算するだろう)正しい色のアレイを使用するようにlmplotにscatter_kwsの配列を渡したいです。しかし、それはオプションではないようです。原則として
まだ私がFacetGrid
から再作成lmplot
機能に頼ることなく、Seabornのlmplot
(意味の機能を使用できるようにする他のアイデアや回避策?
私は完全にあなたが達成しようとしているのかを理解していません。おそらく、データフレームのどの列をどのタイプの視覚化に使用すべきかを明示して、質問を更新すると助けになるかもしれません。 – ImportanceOfBeingErnest
明瞭にするために編集されました。ありがとう:) – pistachio
'scatter_kws 'は(おそらく)異なるポイント数を持つ両方の散布図に同時に渡されるので、あなたが求めているものは簡単には可能ではないと思います。あなたが必要とする 'lmplot'の機能は何ですか? – ImportanceOfBeingErnest