【実例多数】Pythonで棒グラフを作る方法|2D・3Dコード付

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年6月)

✔このような方へ向けて書かれた記事となります

「Pythonで棒グラフをどのように作成できるのだろうか?」
「Pythonで棒グラフを描く方法を知りたい」
「Pythonを使った棒グラフの実例が見たい」

✔当記事を通じてお伝えすること

  • Pythonを使った棒グラフの基本概念
  • Pythonで棒グラフを描く方法やその応用
  • Pythonで作成された棒グラフの実例

当記事では、Pythonを用いて棒グラフを作成する基本手法から、さまざまな応用例まで、具体的なテクニックを用いてわかりやすく解説しています。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

はじめに

Pythonでグラフを描画する利点と棒グラフの活用シーンについてお話しします。

  • Pythonでグラフを描画する利点
  • 棒グラフの活用シーン

Pythonでグラフを描画する利点

Pythonは科学技術計算やデータ分析の分野で幅広く使用されています。

その理由のひとつに、データを視覚化する機能が豊富に存在することが挙げられます。

グラフを描画することで、データの傾向やパターンを素早く理解することができ、結果を他人に伝えやすくなります。

棒グラフの活用シーン

棒グラフは、カテゴリ間の数量や頻度の比較に非常に適しています。

さまざまなデータを視覚的に比較するのに有効だからです。

例えば、以下のようなデータで棒グラフが使えるでしょう。

  • 商品やサービスの売上
  • アンケート結果の集計
  • 時間経過に伴う変化

2つ以上のカテゴリを並べて比較する複数の棒グラフや、エラーバーを含めた棒グラフなど、視覚化の方法も多種多様です。

準備: 必要なライブラリのインストール

Pythonでグラフを描画するために必要なライブラリのインストール方法をお伝えします。

今回はmatplotlibをメインに、任意でpandasもインストールすることを想定しています。

  • matplotlibのインストール
  • 任意: pandasのインストール(データ分析を行う場合)

matplotlibのインストール

matplotlibはPythonのグラフ描画ライブラリで、様々な種類のグラフを描画できます。

インストールはpipを使っておこないましょう。

コマンドラインから以下のコマンドを実行してください。

pip install matplotlib

任意: pandasのインストール(データ分析を行う場合)

pandasはデータ分析を行うためのライブラリです。

CSVやExcelファイルを読み込んで分析することができます。

インストールはpipを使っておこないましょう。

以下のコマンドをコマンドラインで実行してください。

pip install pandas

matplotlibについて

こちらでは、グラフ描画ライブラリmatplotlibの概要と、棒グラフを描画するためのmatplotlib.pyplot.bar関数の使い方を説明します。

  • matplotlibの概要
  • matplotlib.pyplot.barの使い方

matplotlibの概要

matplotlibはPythonのグラフ描画ライブラリで、線グラフ、棒グラフ、散布図、ヒストグラムなど多様なグラフを描くことが可能です。

また、軸ラベル、タイトル、凡例などの要素を自由にカスタマイズしてグラフを作成することができます。

import matplotlib.pyplot as plt

# データ
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# グラフの作成
plt.plot(x, y)

# 軸ラベルとタイトルの設定
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("Line Graph")

# グラフの表示
plt.show()

matplotlib.pyplot.barの使い方

棒グラフを描くにはmatplotlib.pyplotモジュールのbar関数を用います。

bar関数は少なくとも2つの引数、xとheightを必要とします。

xは棒グラフのx軸の位置(通常はカテゴリのラベル)、heightは棒の高さ(通常は値)を指定します。

import matplotlib.pyplot as plt

# データ
categories = ["A", "B", "C", "D"]
values = [20, 35, 30, 15]

# グラフの作成
plt.bar(categories, values)

# 軸ラベルとタイトルの設定
plt.xlabel("Categories")
plt.ylabel("Values")
plt.title("Bar Graph")

# グラフの表示
plt.show()

基本的な棒グラフの描画方法

シンプルな棒グラフの作成方法を詳しく説明します。

以下に挙げる3つのステップを通して、実例として5人の学生の数学の点数を用いた棒グラフを描く方法を見ていきましょう。

  • 例題: 5人の学生の数学の点数
  • コードと説明
  • 実行結果と考察

例題: 5人の学生の数学の点数

以下の5人の学生の数学の点数を棒グラフで描画します。

  • Alice: 85
  • Bob: 83
  • Charlie: 89
  • Dave: 92
  • Eve: 88

コードと説明

matplotlibライブラリを使って棒グラフを描画します。

import matplotlib.pyplot as plt

students = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']
math_scores = [85, 83, 89, 92, 88]

plt.bar(students, math_scores)
plt.xlabel('Students')
plt.ylabel('Math Scores')
plt.title('Math Scores by Student')
plt.show()

学生の名前と数学のスコアをリストとして作成し、それらをplt.bar関数に渡して棒グラフを作成します。

次に、plt.xlabel, plt.ylabel, plt.titleを使用して、それぞれx軸のラベル、y軸のラベル、グラフのタイトルを設定します。

最後にplt.show()を使ってグラフを表示します。

実行結果と考察

上記のコードを実行すると、各学生の数学のスコアを示す棒グラフが表示されます。

これにより、視覚的に各学生のパフォーマンスを比較可能です。

棒グラフは、カテゴリ間の数量的な違いを明確に示すための強力な手段といえるでしょう。

棒グラフのカスタマイズ方法

棒グラフの表示をカスタマイズするいくつかの方法を探ってみましょう。

以下の様々な描画方法とエラーバーの表示方法、そして積み上げ棒グラフの描画方法について説明します。

  • 色んな形で描画してみよう
  • エラーバー(誤差範囲)を表示する方法
  • 積み上げ棒グラフの描画方法

色んな形で描画してみよう

棒グラフは様々な形式で表示できます。

複数の棒グラフを横に並べる方法と、棒グラフを横向きに表示する方法を見ていきます。

  • 複数の棒グラフを横に並べる方法
  • 横向きに棒グラフを表示する方法

複数の棒グラフを横に並べる方法

2つ以上のカテゴリ間でデータを比較するために、複数の棒グラフを横に並べることが可能です。

これは、plt.bar関数を複数回呼び出し、x座標を微調整することで実現できます。

以下に、男女別の試験スコアを示すためのサンプルコードを示します。

import matplotlib.pyplot as plt
import numpy as np

categories = ['Math', 'Science', 'English']
men_scores = [85, 83, 89]
women_scores = [90, 87, 92]

x = np.arange(len(categories))

plt.bar(x - 0.2, men_scores, width=0.4)
plt.bar(x + 0.2, women_scores, width=0.4)

plt.xticks(x, categories)
plt.xlabel('Categories')
plt.ylabel('Scores')
plt.title('Scores by Category and Gender')
plt.legend(['Men', 'Women'])
plt.show()

np.arange関数を使ってカテゴリの数に対応する等差数列を作成し、それをx座標として利用しています。

各カテゴリに対して、plt.bar関数を2回呼び出して男性と女性のスコアをそれぞれ描画。

widthパラメータを使用して棒の幅を設定し、plt.legend関数を使用して凡例を追加するのです。

横向きに棒グラフを表示する方法

棒グラフを横向きに表示する場合、barh関数を使います。

カテゴリ名が長く、縦に表示すると読みにくい場合に便利です。

import matplotlib.pyplot as plt

categories = ['Mathematics', 'Science and technology', 'English literature']
scores = [85, 83, 89]

plt.barh(categories, scores)
plt.xlabel('Scores')
plt.title('Scores by Category')
plt.show()

このコードはカテゴリごとのスコアを横向きの棒グラフで表示します。

エラーバー(誤差範囲)を表示する方法

エラーバーは、データの信頼性を視覚化するために使用されるもの。

yerr引数またはxerr引数をbar関数に渡すことでエラーバーを描画できます。

平均と標準偏差を示す棒グラフを描画しましょう。

import matplotlib.pyplot as plt
import numpy as np

categories = ['Math', 'Science', 'English']
means = [85, 83, 89]
std_devs = [2.5, 3.2, 1.8]

x = np.arange(len(categories))

plt.bar(x, means, yerr=std_devs, capsize=4)
plt.xticks(x, categories)
plt.ylabel('Scores')
plt.title('Scores by Category with Error Bars')
plt.show()

capsize引数はエラーバーの先端のキャップのサイズを制御します。

積み上げ棒グラフの描画方法

複数のデータセットがある場合、積み上げ棒グラフを使用するのものおすすめです。

積み上げ棒グラフにより、それぞれのデータセットが全体に占める割合を視覚的に示せます

データの部分集合が全体に対してどのような割合で存在するのかを示すのに特に有用です。

具体的なコードとその結果について見ていきましょう。

pythonCopy codeimport matplotlib.pyplot as plt

# データセット
categories = ['A', 'B', 'C', 'D']
values1 = [15, 30, 45, 10]
values2 = [15, 25, 50, 10]

x_pos = range(len(categories))

# 積み上げ棒グラフを描画
plt.bar(x_pos, values1, label='Value1')
plt.bar(x_pos, values2, bottom=values1, label='Value2')

plt.xticks(x_pos, categories)
plt.ylabel('Value')
plt.title('Stacked Bar chart')
plt.legend()

plt.show()

2つの棒グラフvalues1values2を積み重ねて表示しています。

bar関数のbottom引数で、前にプロットしたバーの値(values1)を指定しましょう。

Value1が先に描かれ、その上にValue2が積み重ねられています。

積み上げ棒グラフには注意が必要で、バーの順序を変えるとグラフの見え方が変わり、解釈が変わる可能性があるためです。

3Dで棒グラフを描画してみよう

こちらでは、3Dで棒グラフを描画する方法についてお伝えしていきます。

3D棒グラフの描画手順と、具体的な3D棒グラフの実例について見ていきましょう。

  • 3D棒グラフの描画手順
  • 3D棒グラフの実例

3D棒グラフの描画手順

matplotlibを使って、3つの変数を同時に視覚化できます。

3Dプロットもサポートしており、3次元の棒グラフを描画できるからです。

ただし3Dプロットは視覚的に複雑であるため、必要性と可読性を常に考慮しましょう。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# データ
categories = ["A", "B", "C", "D"]
x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
z = [20, 35, 30, 15]

# 3Dグラフの作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 3Dの棒グラフの描画
ax.bar3d(x, y, 0, 1, 1, z)

# 軸ラベルとタイトルの設定
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
plt.title("3D Bar Graph")

# グラフの表示
plt.show()

3D棒グラフの実例

それでは、具体的な3D棒グラフの描画例を見ていきましょう。

  • 例題: 商品カテゴリ別の売上高
  • コードと説明
  • 実行結果と考察

例題: 商品カテゴリ別の売上高

3つの商品カテゴリA、B、Cがあり、それぞれについて第1四半期、第2四半期、第3四半期の売上高を棒グラフで表示します。

コードと説明

Pythonのコードは以下の通りです。

matplotlibのAxes3Dクラスを使って3Dの棒グラフを作成します。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# データを定義します
_categories = ['A', 'B', 'C']
_quarters = ['Q1', 'Q2', 'Q3']
_values = np.array([
    [100, 120, 150],  # Aの売上
    [130, 140, 170],  # Bの売上
    [180, 160, 190]   # Cの売上
])

_x = np.arange(len(_categories))
_y = np.arange(len(_quarters))
_x, _y = np.meshgrid(_x, _y)
_x = _x.ravel()
_y = _y.ravel()
_z = np.zeros_like(_x)
_dx = _dy = np.ones_like(_z)
_dz = _values.ravel()

ax.bar3d(_x, _y, _z, _dx, _dy, _dz)

ax.set_xticks(np.arange(len(_categories)))
ax.set_xticklabels(_categories)
ax.set_yticks(np.arange(len(_quarters)))
ax.set_yticklabels(_quarters)
ax.set_zlabel('Sales')

plt.show()

このコードでは以下の順序で処理がおこなわれます。

  • 3Dプロットを行うための準備として、figureを作成する
  • そのfigureの中に3Dのsubplots(サブプロット)を追加する
  • 商品カテゴリと四半期のデータをNumPyの配列として定義する
  • これらのデータをmeshgrid関数を使って3D空間上の格子点に変換する
  • bar3d関数を使って3D棒グラフを描画する

ここでは、x, y, z軸の始点の座標と、各棒の幅と高さを引数に指定しています。

実行結果と考察

このコードを実行すると、商品カテゴリと四半期ごとの売上高を3Dで表現した棒グラフが表示されます。

棒グラフからは、商品カテゴリごと、四半期ごとの売上の違いが一目でわかるでしょう。

棒グラフのスタイルとカスタマイズ方法

こちらでは、棒グラフのスタイルとカスタマイズ方法についてお伝えしていきます。

色や軸ラベルの追加など、必要に応じてカスタマイズが必要です。

  • 棒グラフの色を変更する方法
  • 凡例の追加方法
  • グラフタイトルや軸ラベルの追加方法
  • グリッド線の表示・非表示方法

棒グラフの色を変更する方法

棒グラフの色を変更することがあります。

視覚的な違いを強調し、特定のデータの比較を容易にするためです。

色はbar関数のcolorパラメータを使って指定できます。

以下に、棒グラフの色を変更する例を示しましょう。

import matplotlib.pyplot as plt

# データを定義します
students = ['John', 'Mary', 'Steve', 'Emily', 'Michael']
math_scores = [89, 92, 84, 97, 88]

# 棒グラフを描画します
plt.bar(students, math_scores, color='skyblue')

plt.show()

このコードは、5人の生徒の数学のスコアを青色の棒グラフで表現します。

凡例の追加方法

凡例は、グラフの色やマーカーが何を表現しているのかを示すための重要な要素

matplotlibでは、legend関数を使って簡単に凡例を追加できます。

以下は、棒グラフに凡例を追加する例です。

import matplotlib.pyplot as plt

# データを定義します
students = ['John', 'Mary', 'Steve', 'Emily', 'Michael']
math_scores = [89, 92, 84, 97, 88]

# 棒グラフを描画します
plt.bar(students, math_scores, color='skyblue', label='Math scores')

# 凡例を追加します
plt.legend()

plt.show()

このコードでは、棒グラフを描画する際にlabelパラメータでラベルを指定し、その後legend関数を呼び出して凡例を表示しています。

グラフタイトルや軸ラベルの追加方法

グラフのタイトルや軸ラベルは、データの視覚化を理解するうえで重要な役割を果たします。

matplotlibでは、title関数、xlabel関数、そしてylabel関数を用いてそれぞれグラフのタイトル、x軸のラベル、y軸のラベルが設定可能です。

以下に、棒グラフにタイトルと軸ラベルを追加する具体的な方法を示します。

import matplotlib.pyplot as plt

# データを定義します
students = ['John', 'Mary', 'Steve', 'Emily', 'Michael']
math_scores = [89, 92, 84, 97, 88]

# 棒グラフを描画します
plt.bar(students, math_scores, color='skyblue', label='Math scores')

# タイトルを追加します
plt.title('Math Scores by Student')

# x軸とy軸のラベルを追加します
plt.xlabel('Student')
plt.ylabel('Math Score')

plt.show()

このコードにより、各学生の数学のスコアを表示する棒グラフが生成され、タイトルとして「Math Scores by Student」、x軸ラベルとして「Student」、y軸ラベルとして「Math Score」がそれぞれ設定されます。

グリッド線の表示・非表示方法

グリッド線は、グラフ上の特定の位置を特定しやすくするために役立ちます。

matplotlibでは、grid関数を用いてグリッド線の表示・非表示を制御できるのです。

以下に、棒グラフにグリッド線を追加する例を示します。

import matplotlib.pyplot as plt

# データを定義します
students = ['John', 'Mary', 'Steve', 'Emily', 'Michael']
math_scores = [89, 92, 84, 97, 88]

# 棒グラフを描画します
plt.bar(students, math_scores, color='skyblue', label='Math scores')

# タイトルと軸ラベルを追加します
plt.title('Math Scores by Student')
plt.xlabel('Student')
plt.ylabel('Math Score')

# グリッド線を表示します
plt.grid(True)

plt.show()

このコードでは、grid(True)を使用してグリッド線を表示しています。

グリッド線を非表示にするには、grid(False)を使用します。

まとめ

当記事では、さまざまな種類の棒グラフを作成する方法について学びました。

  • Pythonとmatplotlibライブラリを使用したシンプルな棒グラフ
  • カスタマイズされた棒グラフ
  • 3D棒グラフ
  • エラーバーや積み上げ棒グラフ
  • 色の変更やラベルの追加

棒グラフはデータ分析において非常に有用なツールであり、その描画とカスタマイズは必要なスキルです。

しかし、これらはmatplotlibの提供する機能の一部に過ぎません。

ほかのグラフの種類やカスタマイズオプションを探索することで、さらに広範なデータ分析と視覚化の可能性を開けるでしょう。

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