2

私はいくつかのテストデータを持っています:

import numpy as np
x_data = np.arange(10)
y = np.random.rand(len(x_data))

異なる特性を持つ

ix1 = x_data < 5
ix2 = x_data >= 5

違いを視覚的に調べたいのですが、プロットを台無しにしています:

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_context('poster')

fig, ax = plt.subplots(figsize=(4, 4))
for i, x in enumerate(x_data):
    if ix1[i]:
        sns.set_palette('rainbow', sum(ix1))
    if ix2[i]:
        sns.set_palette('coolwarm', sum(ix2))
    plt.plot(x, y[i], 'o', label='{}'.format(x))
plt.legend(loc='best', prop={'size': 6})
plt.show()

結果は、ポイント 0 ~ 4 がレインボー (赤紫) で、ポイント 5 ~ 9 がクールウォーム (青白赤) であるはずですが、代わりに:

シーボーン出力

だから、2つの質問:

  1. 電話してから電話sns.set_palette()してもplt.subplotsいいですか?
  2. パレットを複数回設定する方法はありますか?
4

1 に答える 1

2

いいえ、matplotlib の動作方法により、カラー パレットはAxesオブジェクトのプロパティであるため、作成時に現在設定されているパレットが何であれ、Axesそれが使用されます。これは、プライベート属性をハックしたい場合に回避できますが (こちらを参照)、あまりお勧めしません。

あなたの場合、広く適用できない可能性のある多少異なるアプローチを使用して、私が思いつくことができるものは次のとおりです。

pal1 = sns.color_palette('rainbow', sum(ix1))
pal2 = sns.color_palette('coolwarm', sum(ix2))

fig, ax = plt.subplots(figsize=(4, 4))
ax.scatter(x_data[ix1], y[ix1], c=pal1, s=60, label="smaller")
ax.scatter(x_data[ix2], y[ix2], c=pal2, s=60, label="larger")
ax.legend(loc="lower right", scatterpoints=5)

ここに画像の説明を入力

実のところ、このビジュアライゼーションはかなり複雑で処理が難しいように感じます (そして、選択した 2 つのパレットはかなり重複しており、これらのデータにはあまり適していません)。そのため、より単純なものから始める価値があるかもしれません。

于 2014-09-17T15:55:50.837 に答える