2017-05-14 15 views
2

pyplot.scatter은 그룹에 해당하는 배열을 c=으로 전달하여 해당 그룹을 기준으로 포인트를 표시합니다. 그러나 이것은 각 그룹을 개별적으로 플로팅하지 않고 범례를 생성하는 것을 지원하지 않는 것으로 보입니다.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

I를 달성 할 그래도 각 그룹을 반복하지 않고도 비슷한 음모를 꾸밀 수 있습니다.

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

그러나이 두 번째 전략을 사용하여 해당 범례를 생성하는 방법을 알 수 없습니다. 내가 본 모든 예제는 그룹을 반복하며 이상적인 것 같지 않습니다. 전 수동으로 전설을 생성 할 수 있지만 다시 지나치게 성가신 것 같습니다.

답변

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을 사용하여 이러한 종류의 플롯을 만들 수 있습니다. 그냥 처음 두 기능을 원하는 경우

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

enter image description here

, 당신은

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

enter image description here

하면 사용할 수 있습니다 (시본도 표시 DataFrame로 사용할 수 홍채 데이터 세트가 있습니다) 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

나는 당신이 seaborn에서 이것을 간단하게 할 수 있다는 것을 알고 있지만, 실제 사용 사례 (3D scatter plot을 그렸을 때) seaborn은 지원하지 않습니다. 두건의 밑에 seaborn는 작의를 실제로하기 위하여 matplotlib를 사용하고있다 - 나는 seaborn가 쌍벌 플롯 (또는 regplot)에서 산란 플롯과 관련 수치 범례를 어떻게 생성 하는지를 살펴볼 수 있다고 생각한다. 내 생각 엔 첫 번째 예제 코드처럼 그룹을 반복하고있다. – user3014097