2017-05-14 5 views
2

pyplot.scatterc=にグループに対応する配列を渡すことができます。しかし、これは、各グループを個別にプロットせずに凡例を生成することをサポートしていないようです。凡例を含む散布プロットをplt.scatterを複数回呼び出すことなく着色した

ので、例えば、グループを反復処理し、それぞれ個別にプロットすることによって生成することができる色のグループとの散布図:生成

import matplotlib.pyplot as plt 
from sklearn.datasets import load_iris 
feats = load_iris()['data'] 
target = load_iris()['target'] 

f, ax = plt.subplots(1) 
for i in np.unique(target): 
    mask = target == i 
    plt.scatter(feats[mask, 0], feats[mask, 1], label=i) 
ax.legend() 

は:

enter image description here

私は達成することができますしかし、各グループを反復することなく同様の見た目のプロット:

f, ax = plt.subplots(1) 
ax.scatter(feats[:, 0], feats[:, 1], c=np.array(['C0', 'C1', 'C2'])[target]) 

しかし、この2番目の戦略では、対応する凡例を生成する方法を理解できません。私が見てきたすべての例は、グループ全体を反復しています。私は手動で伝説を生成することができますが、もう一度それは非常に扱いにくいようです。

答えて

0

それはおそらく意図した使用方法であるので、この問題はまた、ループを使用して対処しmatplotlibの散乱例:https://matplotlib.org/examples/lines_bars_and_markers/scatter_with_legend.html

あなたの大きな目標は、ちょうどより簡単カテゴリーデータをプロットし、ラベル付けすることです場合は、Seabornを検討すべきです。これは同様の質問ですScatter plots in Pandas/Pyplot: How to plot by category

あなたの目標を達成する方法は、ラベル付きの列でパンダを使用することです。 Pandas Dataframeでデータを取得したら、Seaborn pairplotを使ってこのようなプロットを作成できます。あなただけの最初の二つの機能を利用する場合は、あなたが

sns.pairplot(x_vars=['sepal_length'], y_vars=['sepal_width'], data=iris, hue="species", size=5) 

enter image description here

の場合を使用することができます

import seaborn as sns 
iris = sns.load_dataset("iris") 
sns.pairplot(iris, hue="species") 

enter image description here

(Seabornもラベルされたデータフレームとして利用できるのアイリスデータセットを持っています)あなたは本当にSklearnのデータ辞書を使いたいと思うので、それをデータフレームに入れることができます:

import pandas as pd 
from sklearn.datasets import load_iris 
import numpy as np 

feats = load_iris()['data'].astype('O') 
target = load_iris()['target'] 
feat_names = load_iris()['feature_names'] 
target_names = load_iris()['target_names'].astype('O') 

sk_df = pd.DataFrame(
    np.hstack([feats,target_names[target][:,np.newaxis]]), 
    columns=feat_names+['target',]) 
sns.pairplot(sk_df, vars=feat_names, hue="target") 
+0

私はあなたが海底でこれを行うことができますが、私の実際の使用例(私が3D散布図をプロットしているところです)はシーボーンがサポートしていないことを認識しています。フードの下で海底はmatplotlibを使って実際にプロットをしています - 私は、シーボーンが散布図と関連する数字の伝説をペアプロット(またはプロットプロット)でどのように生成しているか見ることができます。私の推測では、サンプルコードの最初のビットのようにグループ全体がループしています。 – user3014097

関連する問題