0

ループによるファセットに関するこの質問からのデータに基づいて、 を呼び出してax = df.plot(kind='bar')、生成されAxesSubplotたオブジェクトを特定の軸位置/座標に割り当てることができるかどうか疑問に思っていましたか? (ファセット行 1、列 1、2、3 など...)?

私が質問している理由は、バー プロット自体をファセットするためではなく、geopandasライブラリを使用してマップを作成するためです。棒グラフで機能する場合は、geopandas geodataframe.plot() 呼び出しでも機能する可能性があります。軸自体からマップをプロットすることはできないため、逆の方法でプロット呼び出しの副産物として軸を取得し、それをグリッドに適切に配置する必要があるようです。

動作しない例 -- ループは実際には疑似です。毎回別のパネルをプロットするために軸インデックスを移動しません (実際、サブプロット呼び出しから軸オブジェクトを上書きします)。ただし、それは私がやりたいことです-サブプロット呼び出しからのプロット呼び出しから生成された軸オブジェクトを軸(座標空間)にマップします)。

N = 100
industry = ['a','b','c']
city = ['x','y','z']
ind = np.random.choice(industry, N)
cty = np.random.choice(city, N)
jobs = np.random.randint(low=1,high=250,size=N)
df_city =pd.DataFrame({'industry':ind,'city':cty,'jobs':jobs})

## how many panels do we need?
cols =df_city.city.value_counts().shape[0]
fig, axes = plt.subplots(1, cols, figsize=(8, 8))

for x, city in enumerate(df_city.city.value_counts().index.values):
    data = df_city[(df_city['city'] == city)]
    data = data.groupby(['industry']).jobs.sum()
    axes = data.plot(kind='bar')
    print type(axes)
    fig.suptitle('Employment By Industry By City', fontsize=20)

<class 'matplotlib.axes._subplots.AxesSubplot'>
<class 'matplotlib.axes._subplots.AxesSubplot'>
<class 'matplotlib.axes._subplots.AxesSubplot'>

ここに画像の説明を入力

4

1 に答える 1

1

私が正しく理解していれば、その他の質問で受け入れられた答えは、パンダでこれを行う可能性について過度に悲観的です。これはどう:

for ix, (key, group) in enumerate(df_city.groupby('industry')):
    ax = pyplot.subplot(1, 3, ix+1)
    group.groupby('city')['jobs'].sum().plot(kind='bar', ax=ax)
    ax.set_xlabel('industry: {}'.format(key))

これで次のようになります。

ここに画像の説明を入力

アイデアは、サブプロットを分離したい変数でグループ化し、グループを反復することです。グループごとに、 を使用pyplot.subplotして各グループの目的のサブプロットをターゲットにし、グループ データに対して別の groupby を使用して、プロットする集計値を取得します。axに引数を渡してDataFrame.plot、既存の軸オブジェクトにプロットするように指示できます。groupby(最初に産業でグループ化し、次に各プロット内の都市でグループ化するか、またはその逆にするかはわかりませんが、逆にしたい場合は、2 つの呼び出しで「産業」と「都市」を切り替えるだけです.)

このバージョンでは、座標軸の範囲はサブプロット全体で均等化されていません。しかし、それを処理するために一般的なアイデアを磨くことができます。

于 2014-10-06T03:13:21.740 に答える