2

R's多面的なチャートを作成するとき、私は素晴らしいggplot- イディオムに慣れすぎているのかもしれません(数値変数と文字列変数を異議なしに使用します)。

私は通常、いくつかの次元で多くの棒グラフをファセットしていますが、最近、簡単なファセット インターフェイスを持つ matplotlib 上に構築された著名な seaborn ライブラリを見つけました。

棒グラフでは、通常、変数 x に (カテゴリ文字列ベクトルではなく) 数値ベクトルが必要です。ここでは、最初にいくつかのモック データと基本的なプロットを示します。

import pandas as pd
import numpy as np
import seaborn as sns
N = 100

## generate toy data
ind = np.random.choice(['retail','construction','information'], N)
cty = np.random.choice(['cooltown','mountain pines'], N)
age = np.random.choice(['young','old'], N)
jobs = np.random.randint(low=1,high=250,size=N)

## prep data frame
df_city = pd.DataFrame({'industry':ind,'city':cty,'jobs':jobs,'age':age})
df_city_grouped = df_city.groupby(['city','industry','age']).sum()
df_city_grouped.unstack().plot(kind='bar',stacked=True,figsize=(9, 6),title='Jobs by city, industry, age group')

これにより、このプロットが得られます。このプロットのデータフレーム メソッドは、インデックスを使用して舞台裏でプロットできます。 matplotlib プロット

次に、素晴らしいファセット インターフェイスを持つseabornに進みます。まず、マルチインデックスを平坦化して、代わりに列を作成します (これは API に必要だと思います)。

df_city_grouped.reset_index(inplace=True)
df_city_grouped.head()

+----------+--------------+-------+------+
| city     | industry     | age   | jobs |
+----------+--------------+-------+------+
| cooltown | construction | old   | 563  |
+----------+--------------+-------+------+
| cooltown | construction | young | 1337 |
+----------+--------------+-------+------+
| cooltown | information  | old   | 1234 |
+----------+--------------+-------+------+
| cooltown | information  | young | 1402 |
+----------+--------------+-------+------+
| cooltown | retail       | old   | 1035 |
+----------+--------------+-------+------+

これを呼び出すと、エラーが発生しますTypeError: cannot concatenate 'str' and 'float' objects

g = sns.FacetGrid(df_city_grouped, col="industry", row="city", margin_titles=True)
g.map(plt.bar, "age","jobs", color="darkred", lw=0)

ただし、それをハックして、カテゴリ変数の 1 つを数値に戻すことができます。

mapping = {
'young': 1,
'middle':2,
'old':3}

df_city_grouped['age2']=df_city_grouped.age.map(mapping) 
g = sns.FacetGrid(df_city_grouped, col="industry", row="city", margin_titles=True)
g.map(plt.bar, "age2","jobs", color="darkred", lw=0)

これにより、おおよその結果が得られます (ただし、x に小数点があります)。 数値軸を持つ seaborn プロットの質問は、ファセットの例でカテゴリ軸を処理する最良の方法は何ですか? (ちなみに、

f, (ax) = plt.subplots()
sns.barplot(df_city_grouped.industry, df_city_grouped.jobs, ax=ax, ci=None)

カテゴリラベルで機能します。ファセッティングイディオムの外側。)

4

1 に答える 1

3

とともに使用sns.factorplotkind="bar"ます。詳細についてはドキュメントを参照してください。ただし、データの例を次に示します。

sns.factorplot("age", "jobs", col="industry", row="city", data=df_city,
               margin_titles=True, size=3, aspect=.8, palette=["darkred"])

ここに画像の説明を入力

于 2014-10-03T15:14:42.560 に答える