【Python】データフレームのメソッドから簡単に棒グラフを作成する(DataFrame.plot.bar)

Python

PythonのライブラリPandasのDataFrameのメソッドを使用して簡単にさまざまなグラフを生成することができます。

本記事では、棒グラフの生成を解説します。棒グラフはカテゴリーの数量などを表示することに適しています。またカテゴリーに限らず、離散値に適用することもできます。そのカテゴリーや離散値同士でy軸に当たる数値の大小などを比較することができる点が、棒グラフの最大の利点です。

該当コード

まずは準備からです。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.csv')

シンプルな実装方法

df.plot.bar()

# カラムの内容が系列になる
# 行の数だけズラッと棒グラフが並ぶ

よく使う引数を混ぜて

# 積み上げ棒グラフになる
# 積み上がるのは行の数値が重なっていく
df.plot.bar(stacked=True)

# widthの数値を変えると棒グラフの太さが変わる
df.plot.bar(width=0.3)

解説

以上がデータフレームのメソッドで簡単に棒グラフを実装する方法です。
簡単に実装して、ボリューム感を比較するために「df.plot.bar()」を使用してみるのが良いでしょう。

簡単に実装することを目的としていますので、込み入った設定などは参照サイトから探してみてください。可視化は凝ってしまうと沼なのでご注意を。

さて、解説です。

  • df.plot.bar()

「df.plot.bar()」について。
データフレームの列が系列として、行のデータが同じ系列内で並ぶような形で表示されます。とにかく使ってみてください。
系列の数はカラムの数、棒の数はカラム数×行数となります。膨大なデータについてサクッとやってしまうと、とんでもないグラフができてしまうかもしれませんので、ご注意ください。

  • df.plot.bar(stacked=True)

「stacked=True」について。
行のデータが積み上がっていきます。積み上げ棒グラフができます。matplotlibで積み上げ棒グラフを作るのって、ちょっと面倒だったので、こんな簡単にできるのは大変嬉しいですね。
同じ列内のデータがどんどん積み上がっていくことに注意して使ってください。

  • df.plot.bar(width=0.3)

「width=0.3」について。
こちらを使用して、棒の太さを調整することができます。この数値については、データの量などで細かく試しながら使う必要があります。
場合によってはグラフが重なってしまったり、細すぎてグラフに描画されていないなども発生することがあります。私は細すぎてまっさらなグラフになってしまったことがあります。

参照サイト

公式ドキュメント

matplotlib.pyplot.bar — Matplotlib 3.8.2 documentation
Table Demo — Matplotlib 3.8.2 documentation

安定のnkmk

pandasのplotメソッドでグラフを作成しデータを可視化 | note.nkmk.me
pandas.Series, pandas.DataFrameのメソッドとしてplot()がある。Pythonのグラフ描画ライブラリMatplotlibのラッパーで、簡単にグラフを作成できる。pandas.DataFrame.plot — pandas 0.22.0 documentation Visualizatio...

まとめ

以上です。

簡単に描画することが目的なので、込み入った設定などの説明は省略しました。詳しく設定したい場合はメソッドではなく、matplotlibから描画した方が良いでしょう。最近はBIも発達しているので、BIに合わせて前処理するのも良いと思います。私も良くやります。

棒グラフは、系列同士の比較がメインの用途になります。特に離散値やカテゴリーなどに使用することで、棒グラフの良さがさらに出てきます。
そして、必ず始点は0からにしましょう。正しく比較ができなくなってしまいますので、ご注意ください。

サイト内関連記事

その他の技術系記事も書いています

データサイエンティストの書評ブログ
趣味が読書くらいしかない駆け出しデータサイエンティストの書評ブログです。日々の勉強のアウトプットや趣味の読書のおすすめをしていきます。

転職・スキルアップはこちらからどうぞ

オススメ転職はこちらからどうぞ
オススメのスキルアップはこちらからどうぞ

コメント

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