まず、hue
の用途ですが、「科目毎に色を変えて」とは少し意味合いが違います。
hue
を使う場合はデータにもう1つカテゴリー列を追加して、そのカテゴリー毎に分布がどのようになっているかを色分けして表示できます。
例えば、質問のコードを例にとると、この生徒が「文系クラス」に所属する生徒か「理系クラス」に所属する生徒かを識別するカテゴリー列を作成して、その所属クラス毎に色分けする といった使い方ををます。
上記の例を質問のコードに追記して書くと、こんな感じになります。
Python
1%matplotlib inline
2import pandas as pd
3import numpy as np
4import seaborn as sns
5
6sns.set()
7
8datas = []
9for i in range(1, 101):
10 if i % 2 == 0:
11 data = []
12 data.append(np.random.randint(70, 100))
13 data.append(np.random.randint(70, 100))
14 data.append(np.random.randint(70, 100))
15 data.append(np.random.randint(20, 70))
16 data.append(np.random.randint(20, 70))
17 data.append('文系クラス')
18 datas.append(data)
19 else:
20 data = []
21 data.append(np.random.randint(20, 70))
22 data.append(np.random.randint(20, 70))
23 data.append(np.random.randint(20, 70))
24 data.append(np.random.randint(70, 100))
25 data.append(np.random.randint(70, 100))
26 data.append('理系クラス')
27 datas.append(data)
28index = []
29for i in range(1, 101):
30 index.append("student{}".format(i))
31df = pd.DataFrame(datas, index=index, columns=["japanese", "english", "society", "math", "science", "class"])
32
33sns.pairplot(df, hue='class')
次に質問の「科目毎に色を変えて」ですが、これば結構面倒です。。。
sns.pairplot()
にはそのような用途用のパラメータがありませんので、 sns.PairGrid()
を使って色を変える部分は自分で記述することになります。
一応、X側に割り当てられた科目毎に色を変えるサンプルを記述しましたので、参考にしてみてください。
Python
1%matplotlib inline
2import pandas as pd
3import numpy as np
4import seaborn as sns
5import matplotlib.pyplot as plt
6
7sns.set()
8
9datas = []
10for i in range(1, 101):
11 if i % 2 == 0:
12 data = []
13 data.append(np.random.randint(70, 100))
14 data.append(np.random.randint(70, 100))
15 data.append(np.random.randint(70, 100))
16 data.append(np.random.randint(20, 70))
17 data.append(np.random.randint(20, 70))
18 datas.append(data)
19 else:
20 data = []
21 data.append(np.random.randint(20, 70))
22 data.append(np.random.randint(20, 70))
23 data.append(np.random.randint(20, 70))
24 data.append(np.random.randint(70, 100))
25 data.append(np.random.randint(70, 100))
26 datas.append(data)
27index = []
28for i in range(1, 101):
29 index.append("student{}".format(i))
30df = pd.DataFrame(datas, index=index, columns=["japanese", "english", "society", "math", "science"])
31
32# 散布図を書く関数
33def my_scatter(x, y, **kwargs):
34 # 科目に対する色を指定
35 colors = {"japanese":"red",
36 "english":"blue",
37 "society":"yellow",
38 "math":"pink",
39 "science":"green"}
40 # x.nameの種類により色を設定する
41 kwargs['color'] = colors[x.name]
42 plt.scatter(x, y, **kwargs)
43
44g = sns.PairGrid(df)
45# 対角線上は、単なるヒストグラムを描画
46g.map_diag(plt.hist)
47# 対角線以外は、独自の散布図関数を呼ぶ
48g.map_offdiag(my_scatter)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/23 19:58
2020/04/24 00:19 編集
2020/04/24 00:50