plot.bar 棒グラフ作成

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]:

DateOfficeTele
02019-06-031921
12019-06-04238
22019-06-051129

棒グラフを描画するには、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();

また、xyなどのいくつかの設定は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()
https://images.pyq.jp/repo/prod/pydata_plot_graph_v2/plot_graph2.jpg

コメント

タイトルとURLをコピーしました