DataFrameでは、以下のようにbar()
メソッドを使うと棒グラフを描画できます。デフォルトでは、x軸はインデックス、y軸は数字が格納された全ての列が使われます。
df.plot.bar(オプション)
bar()
にはさまざまなオプションを指定可能です。以下は、よく使うものです。
x
:x軸で使用する列の列名。デフォルトはNoneです。Noneを指定すると、インデックスがx軸に使われます。y
:y軸で使用する列の列名。デフォルトはNoneです。Noneを指定すると、すべての数字の列が使われます。stacked
:積み上げをするかどうか。デフォルトはFalseです。Falseでは横に並んで描画されます。Trueでは縦に積み重なって描画されます。
この他にも、plot()
で使えるオプション(グラフのタイトル、x軸の値の角度など)はplot.bar()
でも共通して使えます。使用可能なすべてのオプションについては、pandasの公式ドキュメントで確認できます。
また、Seriesも同様にSeries.plot.bar()
で棒グラフを描画できます。Series.plot()
同様、x軸にはインデックス、y軸にはSeriesの値が使われます。
演習
%matplotlib inline import pandas as pd df = pd.read_csv('dataset/attendances.csv') df[:3]
Out[1]:
Date | Office | Tele | |
---|---|---|---|
0 | 2019-06-03 | 19 | 21 |
1 | 2019-06-04 | 2 | 38 |
2 | 2019-06-05 | 11 | 29 |
棒グラフを描画するには、df.plot.bar()
を使います。ここでは横軸を日付にしたいので、引数x
で”Date”を指定します。In [2]:
df.plot.bar(x="Date");
列Office
と列Tele
の合計も確認したいとします。そのためには、積み上げ棒グラフが便利です。積み上げ棒グラフにするには、stacked=True
をつけます。In [3]:
df.plot.bar(x="Date", stacked=True);
引数y
を使うと、1列(下記では列Tele
)だけ棒グラフを描画できます。1列だけでは、stacked=True
の意味がないので省略しています。In [4]:
# 列Teleの棒グラフ df.plot.bar(x="Date", y="Tele");
1列だけ棒グラフを描画したい場合は、Series.plot.bar()
を使うこともできます。引数なしで実行して確認してみましょう。横軸はインデックスになり、凡例は表示されません。In [5]:
# 列Teleの棒グラフ df.Tele.plot.bar();
また、x
やy
などのいくつかの設定はSeries.plot.bar()
では無視されます。たとえば、次のように引数x
で”Date”を指定しても、x軸はインデックスのままです。また、引数y
も無視されます。In [6]:
# Seriesのplotではxとyは無視される df.Tele.plot.bar(x="Date", y="NoName");
df.plot.bar(x=”Date”, y=”Tele”) と同じ表示にするには、下記のように列Date
をインデックスにし、legend
にTrueを指定します。In [7]:
# 列Teleの棒グラフ df.set_index("Date").Tele.plot.bar(legend=True);
補足
今回は、次のようにplot.bar()
を使って棒グラフを描画する方法を学びました。
df.plot.bar(オプション)
これは、次のようにplot()
でグラフの種類(引数kind
)を指定しても書けます。
df.plot(kind="bar", オプション)
書き方は異なりますが機能は同じです。好みの方を使うと良いでしょう。
補足:Seriesのグラフでx軸の指定
df.Tele
はSeriesです。df.Tele
に列Date
はないので、df.Tele.plot.bar(x="Date")
のようにしてもx軸に日付は描画されず、引数x
の指定は無視されます。
x軸に使用されるのはインデックスなので、下記のように列Date
をインデックスにすると、x軸に日付を描画できます。
df.set_index("Date").Tele.plot.bar()
コメント