目次
概要
Pythonのデータ可視化ライブラリであるMatplotlibを使用し、デザインを調整した棒グラフを作成するレシピです。
単にグラフを表示するだけでなく、棒の色、枠線の太さ、幅、軸目盛りのラベル設定など、主要なパラメータを制御して見やすいグラフを作成する方法を解説します。
仕様(入出力)
- 入力: カテゴリ名(文字列のリスト)、数値データ(整数のリスト)、各種スタイル設定(色、幅など)
- 出力: ウィンドウへのグラフ描画(
plt.show())、または画像ファイルとしての保存 - 要件:
matplotlibライブラリがインストールされていること
最小の使い方
import matplotlib.pyplot as plt
# 最小限のデータ
categories = ["Item 1", "Item 2", "Item 3"]
values = [100, 150, 80]
# グラフ描画
fig, ax = plt.subplots()
ax.bar(categories, values)
plt.show()
コード全文
ここでは、棒の幅や色、枠線、軸ラベルの位置などを細かく指定した完全なコードを提示します。
import matplotlib.pyplot as plt
def main():
# 1. データの準備(部門ごとのスコアなどを想定)
departments = ["Sales", "Marketing", "Develop", "HR", "Support"]
scores = [85, 62, 95, 70, 78]
# X軸の座標位置を定義(0, 1, 2...)
x_positions = range(len(departments))
# 2. 図(Figure)と座標軸(Axes)の生成
# figsizeで画像のサイズを指定(横インチ, 縦インチ)
fig, ax = plt.subplots(figsize=(8, 5))
# 3. 棒グラフの描画とスタイルの適用
# 引数で色や枠線、幅などを指定
ax.bar(
x=x_positions, # X軸の位置
height=scores, # 棒の高さ(データ値)
width=0.6, # 棒の幅(1.0で隙間なし)
bottom=0, # Y軸の開始位置
color='#66b3ff', # 塗りつぶしの色(Hexカラー)
edgecolor='#003366', # 枠線の色
linewidth=2, # 枠線の太さ
align='center' # 目盛りの配置('center' または 'edge')
)
# 4. 軸目盛りとラベルの設定
# X軸の数値を指定
ax.set_xticks(x_positions)
# 数値に対応するラベル(部門名)を適用
ax.set_xticklabels(departments)
# その他の見た目調整(タイトルやラベル)
ax.set_title("Department Performance Scores")
ax.set_xlabel("Department")
ax.set_ylabel("Score")
# グリッド線の表示(Y軸のみ、破線、透明度設定)
ax.grid(axis='y', linestyle='--', alpha=0.7)
# 5. 描画実行
plt.show()
if __name__ == "__main__":
main()
カスタムポイント
ax.bar() メソッドおよび Axes オブジェクトで使用できる主要なパラメータと設定メソッドの一覧です。これらを変更することでグラフの表現を調整できます。
ax.bar() の主な引数
| パラメータ名 | 説明 | 設定例 |
| x | X軸上の位置(座標)。必須。 | [0, 1, 2] |
| height | 棒の高さ(データの値)。必須。 | [10, 20, 30] |
| width | 棒の幅。デフォルトは 0.8。 | 0.5 |
| bottom | 棒の底辺のY座標。積み上げグラフに使用。 | 0 (デフォルト) |
| color | 棒の塗りつぶし色。色名やHexコード。 | 'blue', '#FF5733' |
| edgecolor | 棒の枠線の色。 | 'black' |
| linewidth | 枠線の太さ(ポイント単位)。 | 2.0 |
| align | 目盛りに対する棒の位置合わせ。 | 'center' (推奨), 'edge' |
軸設定メソッド(Axes オブジェクト)
| メソッド名 | 説明 | 使用目的 |
| set_xticks | 軸目盛りを表示する位置(数値)を指定。 | 棒の中心に目盛りを合わせる |
| set_xticklabels | 目盛り位置に対応するラベル(文字列)を指定。 | 数値をカテゴリ名に置き換える |
- 色の変更:
colorには'skyblue','salmon'などの名前指定のほか、'#RRGGBB'形式のカラーコードも使用可能です。 - 枠線の強調: 背景色が白い場合、薄い色の棒グラフは見にくくなることがあります。
edgecolorとlinewidthを設定して視認性を高めてください。
注意点
- 日本語の文字化けMatplotlibのデフォルト設定では日本語が含まれると「□□□」のように文字化けします。日本語を表示する場合は、対応フォントをインストールして設定するか、英語表記で統一することをお勧めします。
- xとheightの要素数不一致x(位置)と height(値)のリストの長さは必ず一致させてください。長さが異なると ValueError が発生します。
- alignの設定align=’edge’ に設定すると、棒の左端が x の座標に来るため、ラベルとの位置関係がずれて見えることがあります。通常はデフォルトの ‘center’ を使用します。
バリエーション(任意)
水平棒グラフ(barh)
項目名が長い場合や、ランキング形式の表示には水平棒グラフが適しています。width の代わりに height で棒の太さを指定するなど、引数が一部異なります。
import matplotlib.pyplot as plt
def create_horizontal_bar():
labels = ["Long Category Name A", "Long Category Name B", "Long Category Name C"]
values = [45, 88, 30]
y_pos = range(len(labels))
fig, ax = plt.subplots(figsize=(8, 3))
# barh を使用
ax.barh(
y=y_pos,
width=values, # 値は width に渡す
height=0.5, # 棒の太さは height で指定
color='lightgreen',
edgecolor='green'
)
ax.set_yticks(y_pos)
ax.set_yticklabels(labels)
# X軸の範囲を調整
ax.set_xlim(0, 100)
plt.tight_layout()
plt.show()
if __name__ == "__main__":
create_horizontal_bar()
まとめ
Matplotlibで棒グラフを作成する際は、ax.bar() の引数を適切に設定することで、デザイン性の高いグラフを作成できます。
特に set_xticks と set_xticklabels を組み合わせることで、任意のカテゴリデータを軸に分かりやすく表示可能です。用途に合わせて色や幅を調整し、可読性の高いグラフを目指してください。
