[解決済み] seabornを使ってDataFrameの積み上げ棒グラフを作成する方法 [重複]。
2022-03-09 16:57:59
質問
私はDataFrame
df
:
df = pd.DataFrame(columns=["App","Feature1", "Feature2","Feature3", "Feature4","Feature5", "Feature6","Feature7","Feature8"], data=[['SHA', 0, 0, 1, 1, 1, 0, 1, 0], ['LHA', 1, 0, 1, 1, 0, 1, 1, 0], ['DRA', 0, 0, 0, 0, 0, 0, 1, 0], ['FRA', 1, 0, 1, 1, 1, 0, 1, 1], ['BRU', 0, 0, 1, 0, 1, 0, 0, 0], ['PAR', 0, 1, 1, 1, 1, 0, 1, 0], ['AER', 0, 0, 1, 1, 0, 1, 1, 0], ['SHE', 0, 0, 0, 1, 0, 0, 1, 0]])
# display(df)
App Feature1 Feature2 Feature3 Feature4 Feature5 Feature6 Feature7 Feature8
0 SHA 0 0 1 1 1 0 1 0
1 LHA 1 0 1 1 0 1 1 0
2 DRA 0 0 0 0 0 0 1 0
3 FRA 1 0 1 1 1 0 1 1
4 BRU 0 0 1 0 1 0 0 0
5 PAR 0 1 1 1 1 0 1 0
6 AER 0 0 1 1 0 1 1 0
7 SHE 0 0 0 1 0 0 1 0
積み上げ棒グラフを作成し、各積み上げ棒グラフを
App
のカウントをY軸にとり、Y軸は
1
の値で、X軸は
Feature
.
この棒グラフと似たようなものですが、唯一の違いは、スタックバーと色付きの凡例が欲しいということです。
df_c = df.iloc[:, 1:].eq(1).sum().rename_axis('Feature').reset_index(name='Count')
df_c = df_c.sort_values('Count')
plt.figure(figsize=(12,8))
ax = sns.barplot(x="Feature", y='Count', data=df_c, palette=sns.color_palette("GnBu", 10))
plt.xticks(rotation='vertical')
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()
解決方法は?
Bharath が提案するように、pandas plot を使用することができます。
import seaborn as sns
sns.set()
df.set_index('App').T.plot(kind='bar', stacked=True)
出力します。
更新しました。
<ストライク from matplotlib.colors import ListedColormap df.set_index('App') .reindex_axis(df.set_index('App').sum().sort_values().index, axis=1)\ \. .T.plot(kind='bar', stacked=True, colormap=ListedColormap(sns.color_palette("GnBu", 10)), figsize=(12,6))
Pandas 0.21.0+を更新しました。
reindex_axis
は非推奨です。
reindex
from matplotlib.colors import ListedColormap
df.set_index('App')\
.reindex(df.set_index('App').sum().sort_values().index, axis=1)\
.T.plot(kind='bar', stacked=True,
colormap=ListedColormap(sns.color_palette("GnBu", 10)),
figsize=(12,6))
出力します。
関連
-
Pythonの非常に便利な2つのデコレーターを解説
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] Pythonで定数を作成するにはどうすればよいですか?
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み] pandas DataFrameの特定のセルに対して、インデックスを使用して値を設定する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Python Pillow Image.save jpg画像圧縮問題
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ValueError: xとyは同じサイズでなければならない