回答編集履歴
3
補足を追加2
test
CHANGED
@@ -111,3 +111,99 @@
|
|
111
111
|
という記述になっております。当然 ``name`` には グループ分けに使用した `Sample` の値
|
112
112
|
|
113
113
|
が入っておりますので、そのままタイトルに利用しているだけです。
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
---
|
118
|
+
|
119
|
+
### 【コメントを受けて追記2】
|
120
|
+
|
121
|
+
次に1つ目の件ですが、まずは
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
[https://matplotlib.org/3.1.1/tutorials/intermediate/gridspec.html](https://matplotlib.org/3.1.1/tutorials/intermediate/gridspec.html)
|
126
|
+
|
127
|
+
[https://qiita.com/tsuruokax/items/90167693f142ebb55a7d](https://qiita.com/tsuruokax/items/90167693f142ebb55a7d)
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
あたりを読むと理解が深まるかと思います。
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
とりあえず、簡単に説明すると
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
- figure はグラフを書くための図(を書くためのエリア)
|
140
|
+
|
141
|
+
- axは1つ1つのグラフ
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
となっており、1つの図(figure)には複数のグラフ(ax)を入れる事が出来ます。
|
146
|
+
|
147
|
+
1つの図にどのようにグラフを配置するかは ``subplots()`` の引数にて設定されており、
|
148
|
+
|
149
|
+
第一引数が縦に並べるグラフ数、第二引数が横に並べるグラフの数となりますので
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
例えをあげると、
|
154
|
+
|
155
|
+
- ``fig, axs = plt.subplots(1,4)`` : 横に4個グラフを並べる
|
156
|
+
|
157
|
+
- ``fig, axs = plt.subplots(4,1)`` : 縦に4個グラフを並べる
|
158
|
+
|
159
|
+
- ``fig, axs = plt.subplots(2,2)`` : 横2個、縦2個(計4個)のグラフを並べる
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
のようになります。
|
164
|
+
|
165
|
+
この時の2つめ戻り値(``axs``) は図に配置された各グラフが格納された配列となっておりますので、
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
```Python
|
170
|
+
|
171
|
+
fig, axs = plt.subplots(1,4)
|
172
|
+
|
173
|
+
axs[0].plot() #1番目のグラフをプロット
|
174
|
+
|
175
|
+
axs[1].plot() #2番目のグラフをプロット
|
176
|
+
|
177
|
+
axs[2].plot() #3番目のグラフをプロット
|
178
|
+
|
179
|
+
axs[3].plot() #4番目のグラフをプロット
|
180
|
+
|
181
|
+
```
|
182
|
+
|
183
|
+
のように記述することで、各グラフを描画することができます。
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
で、今回の回答のコードは上記の描画処理を単にループを使って
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
```Python
|
192
|
+
|
193
|
+
fig, axs = plt.subplots(1,4)
|
194
|
+
|
195
|
+
for as in axs:
|
196
|
+
|
197
|
+
ax.plot() # 各グラフにプロット
|
198
|
+
|
199
|
+
```
|
200
|
+
|
201
|
+
のように記述しただけの処理となります
|
202
|
+
|
203
|
+
(前述のとおり ``zip`` を使ってデータと一緒にループされております)
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
> この変数の代わりに適当に文字を入れてもなりたたなかったので、これは一種の仕様的なものですか?
|
208
|
+
|
209
|
+
いや、``fig`` も ``axs`` も私が勝手に決めた変数名ですので変更しても動作するはずです。
|
2
追記1
test
CHANGED
@@ -49,3 +49,65 @@
|
|
49
49
|
|
50
50
|
|
51
51
|
```
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
---
|
56
|
+
|
57
|
+
### 【コメントを受けて追記1】
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
順番が逆になりますが、まずは ``groupby()`` から。
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
一般的に ``DataFrame.groupby()`` をループで使用する場合はこんな感じで記述します。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
```Python
|
70
|
+
|
71
|
+
for name, data in pd.groupby('Sample'):
|
72
|
+
|
73
|
+
# 何らかの処理
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
このようにすると、Sample列の値が同じもの同士でグループ分けして、そのグループ毎に
|
80
|
+
|
81
|
+
ループ処理がおこなわれます。またこの際に、ループにには2つの変数が渡され、
|
82
|
+
|
83
|
+
- 1つ目(上記のコードでは`name`)はグループ分けに使用した `Sample` の値、
|
84
|
+
|
85
|
+
- 2つ目(上記のコードでは`data`)はグループ分けされたDataFrame
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
が入ります。
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
今回、回答で記述したコードはこの簡単なバリエーションで、別の配列 ``axs``(後で説明)
|
94
|
+
|
95
|
+
と同期して一緒にループ処理を行う必要があったので ``zip()`` を使用して
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
```Python
|
100
|
+
|
101
|
+
axs = [......] # 何らかの配列
|
102
|
+
|
103
|
+
for ax, (name, data) in enumerate(axs, pd.groupby('Sample')):
|
104
|
+
|
105
|
+
# 何らかの処理
|
106
|
+
|
107
|
+
```
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
という記述になっております。当然 ``name`` には グループ分けに使用した `Sample` の値
|
112
|
+
|
113
|
+
が入っておりますので、そのままタイトルに利用しているだけです。
|
1
タイポを修正
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
import numpy as np
|
12
12
|
|
13
|
-
import matplotlib.pyplot as pl
|
13
|
+
import matplotlib.pyplot as plt
|
14
14
|
|
15
15
|
|
16
16
|
|
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
fig, axs = plt.subplots(1, len(grouped_df))
|
37
|
+
fig, axs = plt.subplots(1, len(grouped_df))
|
38
38
|
|
39
39
|
|
40
40
|
|