問題
以下のようなDataFrameがあるとします。
index | 都道府県 | 建物 | 価格 |
---|---|---|---|
0 | 東京 | 木造 | 100 |
1 | 東京 | 鉄骨 | 120 |
2 | 東京 | 木造 | 100 |
3 | 埼玉 | 鉄骨 | 80 |
4 | 埼玉 | 木造 | 80 |
5 | 埼玉 | 鉄骨 | 90 |
6 | 東京 | 鉄骨 | 90 |
7 | 東京 | 鉄骨 | 130 |
8 | 埼玉 | 木造 | 100 |
9 | 埼玉 | 木造 | 60 |
このDataFrameを都道府県ごとにxを建物の種類yを価格にして箱ひげ図を描きたいです。
しかし、sns.boxplotを利用してsubplotを利用する方法が調べてもいまいちわかりませんでした。
どのようにすればできるでしょうか?
最終的にはこの例の場合、東京で木造と鉄骨の2つの箱ひげ図が1つのグラフに、埼玉で木造と鉄骨の2つの箱ひげ図が1つのグラフに描かれた1×2のグラフが作成したいです。
以下のコードで上記のDataFrameは作成可能です。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # データフレームの準備 pref = ["東京", "東京", "東京", "埼玉", "埼玉", "埼玉", "東京", "東京", "埼玉", "埼玉"] house = ["木造", "鉄骨", "木造", "鉄骨", "木造", "鉄骨", "鉄骨", "鉄骨", "木造", "木造"] value = [100, 120, 100, 80, 80, 90, 90, 130, 100, 60] df = pd.DataFrame({'都道府県':pref, '建物': house, '価格':value})
私は以下のように行っていましたが、途中であきらめてしまいました。
もっと良い方法がありそうです。
pref_list = df["都道府県名"].tolist() pref_list = set(pref_list) structure_list = df["建物"].tolist() structure_list = set(structure_list) fig1, ax1 = plt.subplots(7, 7, figsize=(50, 50)) j = 0 for i, pref in enumerate(pref_list): for s in structure_list: if j == 7: j = 0 ax = i // 7 ax1[ax][j].set_title(pref) ax1[ax][j].boxplot(df[(df["都道府県名"]==pref) & (df["建物"] == s)]["取引価格(総額)_log"]) ax1[ax][j].set_xlim(0, 3) ax1[ax][j].set_ylim(2, 10) j = j + 1 plt.show()
これでは、seaborn
が使えず困っています。subplotが7×7なのは都道府県が47都道府県本来あるので、そのようにしています。
このコードは動きません
わかる方教えていただきたいです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/02 15:02