Pandasの積み上げ面グラフ

Pandasの積み上げ面グラフ#

公開日

参考

Pandasを使わずMatplotlib単体で積み上げ面グラフを出力する場合、Matplotlibの積み上げ面グラフを参照ください。

PandasのSeries, DataFrameで縦向きの積み上げ面グラフをプロットする方法は、以下の2つがあります。

  • plot()メソッドにkind='area'オプションを渡す。

  • plot.area()メソッドを使う(メソッドチェーン)。

両者にほぼ違いはありません。この記事では後者を使用します。

簡単な例#

まず、pandas.Seriesで棒グラフをプロットする簡単な例を以下に示します。indexに指定した変数が横軸になります。

import pandas as pd

sr = pd.Series([1, 3, 2], index=["spam", "ham", "egg"])
sr.plot.area()
<Axes: >
../_images/0f9a22e569b9ca533617fb46956b57d6eab6317e52c3a74413e58a6545a1ddbf.png

次に、pandas.DataFrameの簡単な例を以下に示します。indexに指定した変数が横軸になり、columnsが異なる色のエリア(系列)になります。

df = pd.DataFrame(
    [[1, 2], [3, 1], [2, 4]],
    index=["spam", "ham", "egg"],
    columns=["Alice", "Bob"]
)

display(df)
df.plot.area()
Alice Bob
spam 1 2
ham 3 1
egg 2 4
<Axes: >
../_images/07fbce4410f3bc4cf4b32e7b9830d63c58d8eac415e0a887e7972b91d1465d75.png

plot(), plot.area()の各メソッドのオプションについては、Pandas グラフ作成の共通設定を参照して下さい。

透過させて比較#

plot.area()メソッドにstacked=Falseオプションを与えると、積み上げグラフではなく、色を透過させて各系列の値が比較できる通常の面グラフになります。

df.plot.area(stacked=False)
<Axes: >
../_images/4e506eaec5e498f6614d4d95853bb96a3bdee227e8ec87c9480d02ccbff79fe5.png

色の変更#

グラフの色を変更するには、色を辞書形式またはリスト形式でcolorオプションに渡します。オプションで指定できる色の詳細は、以下の記事を参考にして下さい。

Matplotlib 色の書式

df.plot.area(color={"Alice": "brown", "Bob": "pink"})
<Axes: >
../_images/f83a9e10ee5806a45a0981aedcb6ada60fb103b8cdd09cf1128467c1064c60bf.png

また、色の透過度を変更する場合、alphaオプションに0から1の範囲で値を渡します。 値が小さいほど透明に近づきます。

df.plot.area(alpha=0.3)
<Axes: >
../_images/224b07b029aba143c5cc811e9c6fa7a8a6494a8610c8f670ba48d3bc132a177c.png