pandasとmatplotlibを使用してカテゴリデータをプロットする


95

カテゴリデータを含むデータフレームがあります。

     colour  direction
1    red     up
2    blue    up
3    green   down
4    red     left
5    red     right
6    yellow  down
7    blue    down

カテゴリに基づいて円グラフやヒストグラムなどのグラフを生成したいと思います。ダミーの数値変数を作成せずに可能ですか?何かのようなもの

df.plot(kind='hist')

回答:


182

あなたは単にvalue_countsシリーズで使うことができます:

df['colour'].value_counts().plot(kind='bar')

ここに画像の説明を入力してください


1
df["colour"].value_counts().plot(kind='bar')一般的な代替案として提案
openwonk 2017年

2
xラベルの順序を指定することはできますか?
P. Camilleri 2017

3
はい、xラベルの順序を明示的に指定できます。例df['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]
Alexander

このプロットを調整する方法を教えてください。クラスごとに色を変更したい場合や、凡例を追加したい場合などです。
IbtihajTahir20年

24

mosaicstatsmodelsから便利なプロットが見つかるかもしれません。これにより、分散の統計的な強調表示も可能になります。

from statsmodels.graphics.mosaicplot import mosaic
plt.rcParams['font.size'] = 16.0
mosaic(df, ['direction', 'colour']);

ここに画像の説明を入力してください

ただし、サイズが0のセルには注意してください。ラベルに問題が発生します。

詳細については、この回答を参照してください


ありがとう。ValueErrorが発生し続けます:NAを整数に変換できません。
Ivan

1
そのため、私はこの回答を参照しました。この問題に対処するのに役立つはずです。
入門書

19

このような :

df.groupby('colour').size().plot(kind='bar')

12

countplotから使用することもできますseaborn。このパッケージはpandas、高レベルのプロットインターフェイスを作成するために構築されています。それはあなたに無料で良いスタイリングと正しい軸ラベルを与えます。

import pandas as pd
import seaborn as sns
sns.set()

df = pd.DataFrame({'colour': ['red', 'blue', 'green', 'red', 'red', 'yellow', 'blue'],
                   'direction': ['up', 'up', 'down', 'left', 'right', 'down', 'down']})
sns.countplot(df['colour'], color='gray')

ここに画像の説明を入力してください

また、少しのトリックでバーを正しい色に着色することもサポートしています

sns.countplot(df['colour'],
              palette={color: color for color in df['colour'].unique()})

ここに画像の説明を入力してください


こんにちは。変数の名前を変更するにはどうすればよいですか。たとえば、変数のカテゴリが10近くあり、このグラフを作成すると、名前が互いに重なります。これを起こさないために私は何ができますか?figsizeか何かを増やす必要がありますか?
MahreenAthar20年

10

同じプロットに棒グラフとして複数のカテゴリ特徴をプロットするには、次のことをお勧めします。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(
    {
        "colour": ["red", "blue", "green", "red", "red", "yellow", "blue"],
        "direction": ["up", "up", "down", "left", "right", "down", "down"],
    }
)

categorical_features = ["colour", "direction"]
fig, ax = plt.subplots(1, len(categorical_features))
for i, categorical_feature in enumerate(df[categorical_features]):
    df[categorical_feature].value_counts().plot("bar", ax=ax[i]).set_title(categorical_feature)
fig.show()

ここに画像の説明を入力してください


1
これは素晴らしいストループ効果です!
シプリアンTomoiagă

0

あなたは、単に使用することができるvalue_countssortするオプションセットFalse。これにより、カテゴリの順序が保持されます

df['colour'].value_counts(sort=False).plot.bar(rot=0)

画像へのリンク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.