Matplotlib入門|Pythonでグラフを作る基本
Matplotlib(マットプロットリブ)は、Pythonでグラフを作成するための代表的なライブラリです。 折れ線グラフや棒グラフはもちろん、散布図、ヒストグラム、箱ひげ図などもコードから作成できます。
この記事では、初めて使う人が「インストールして、グラフを描き、見た目を整え、画像として保存する」ところまで進めるように、 基本的な流れを一つずつ解説します。最後に、Excelやノーコードの桜チャートとの使い分けも整理します。
目次
1. Matplotlibとは
Matplotlibは、数値や表データをグラフとして可視化するPythonライブラリです。 NumPyやpandasと組み合わせて使われることが多く、データ分析、研究、製造データの確認、レポート画像の自動作成などに利用できます。
- 同じ形式のグラフを、データを変えながら繰り返し作れる
- 色、線、軸、凡例、注釈などを細かく設定できる
- PNG、SVG、PDFなどの形式で保存できる
- 複数のグラフを1枚のFigureに配置できる
細かい設定ができる反面、Excelのように画面上で直接操作するのではなく、基本的にはPythonコードを書いてグラフを作ります。
2. Matplotlibをインストールする
Pythonをインストール済みであれば、ターミナルまたはコマンドプロンプトで次を実行します。
python -m pip install matplotlib
Anaconda環境では、次の方法でもインストールできます。
conda install matplotlib
インストール後は、Pythonコードの先頭で通常このように読み込みます。
import matplotlib.pyplot as plt
pyplotには、グラフの作成・表示・保存に使う関数がまとめられています。
一般的な省略名はpltです。
3. まずは折れ線グラフを作る
次のコードだけで、月ごとの売上を表す折れ線グラフを作成できます。
import matplotlib.pyplot as plt
month = [1, 2, 3, 4, 5]
sales = [120, 150, 135, 180, 210]
fig, ax = plt.subplots()
ax.plot(month, sales, marker="o")
ax.set_xlabel("Month")
ax.set_ylabel("Sales")
ax.set_title("Monthly Sales")
plt.show()
ax.plot()が折れ線を描き、set_xlabel()やset_title()が軸ラベルとタイトルを設定します。
最後のplt.show()でグラフを表示します。
4. FigureとAxesを理解する
Matplotlibを使うときは、まず次の2つを押さえるとコードが読みやすくなります。
| 名前 | 役割 | イメージ |
|---|---|---|
Figure |
画像全体を管理する入れ物 | 用紙・キャンバス全体 |
Axes |
実際にデータを描画する領域 | 座標軸を持つ一つのグラフ |
fig, ax = plt.subplots(figsize=(7, 4))
figがFigure、axがAxesです。
複数のグラフを並べるときは、plt.subplots(2, 2)のように行数と列数を指定できます。
plt.plot()のような書き方も便利ですが、再利用するコードや複数グラフでは、
fig, ax = plt.subplots()から始める書き方が管理しやすくなります。
5. 代表的なグラフとメソッド
| 見たいこと | グラフ | 主なメソッド |
|---|---|---|
| 時間に沿った変化 | 折れ線グラフ | ax.plot(x, y) |
| カテゴリ間の比較 | 棒グラフ | ax.bar(x, height) |
| 2変数の関係 | 散布図 | ax.scatter(x, y) |
| 値の分布 | ヒストグラム | ax.hist(data) |
| 中央値・ばらつき・外れ値 | 箱ひげ図 | ax.boxplot(data) |
| 全体に占める割合 | 円グラフ | ax.pie(values) |
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1, 6)
y = np.array([12, 19, 15, 24, 28])
group_a = np.array([11, 13, 12, 16, 15, 18])
group_b = np.array([8, 10, 9, 11, 12, 13])
fig, axes = plt.subplots(2, 2, figsize=(10, 6), layout="constrained")
axes[0, 0].plot(x, y, marker="o", color="#be3455")
axes[0, 0].set_title("Line")
axes[0, 1].bar(x, y, color="#e78aa0")
axes[0, 1].set_title("Bar")
axes[1, 0].scatter(x, y, color="#2563eb", s=55)
axes[1, 0].set_title("Scatter")
axes[1, 1].boxplot(
[group_a, group_b],
tick_labels=["A", "B"],
patch_artist=True,
boxprops={"facecolor": "#f8d7df", "edgecolor": "#9f1239"},
medianprops={"color": "#9f1239", "linewidth": 2}
)
axes[1, 1].set_title("Box plot")
for ax in axes.flat:
ax.grid(axis="y", linestyle="--", alpha=0.25)
ax.spines[["top", "right"]].set_visible(False)
fig.savefig("matplotlib_basics_example.png", dpi=150)
plt.show()
6. CSV・Excelの表データからグラフを作る
実務では、Pythonのリストを直接書くよりも、CSVやExcelファイルをpandasで読み込んでからMatplotlibへ渡す方法がよく使われます。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("sales.csv")
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(df["month"], df["sales"], marker="o")
ax.set_xlabel("Month")
ax.set_ylabel("Sales")
ax.set_title("Monthly Sales")
fig.savefig("sales.png", dpi=150, bbox_inches="tight")
plt.show()
Excelファイルの場合は、pd.read_excel("sales.xlsx")で読み込めます。
python -m pip install pandas openpyxl
df.head()やdf.dtypesでデータを確認すると原因を見つけやすくなります。
7. タイトル・色・凡例・グリッドを整える
よく使う設定をまとめると、次のようになります。
fig, ax = plt.subplots(figsize=(8, 4.5))
ax.plot(
month,
sales,
color="#be3455",
linewidth=2,
marker="o",
label="Sales"
)
ax.set_title("Monthly Sales", fontsize=16)
ax.set_xlabel("Month")
ax.set_ylabel("Sales")
ax.set_ylim(0, 250)
ax.grid(axis="y", linestyle="--", alpha=0.35)
ax.legend()
fig.tight_layout()
| 設定したいもの | 代表的な書き方 |
|---|---|
| 図の大きさ | plt.subplots(figsize=(8, 4.5)) |
| 色 | color="#be3455" |
| 線の太さ | linewidth=2 |
| 点の形 | marker="o" |
| 軸の範囲 | ax.set_ylim(0, 250) |
| グリッド | ax.grid(axis="y", alpha=0.35) |
| 凡例 | ax.legend() |
複数のグラフで同じデザインを使いたい場合は、スタイルシートやrcParamsで共通設定をまとめることもできます。
8. グラフをPNG・SVG・PDFで保存する
fig.savefig()を使うと、作成したグラフをファイルとして保存できます。
fig.savefig("chart.png", dpi=300, bbox_inches="tight")
fig.savefig("chart.svg", bbox_inches="tight")
fig.savefig("chart.pdf", bbox_inches="tight")
- PNG:Webページ、メール、一般的な資料に使いやすい
- SVG:拡大しても劣化しにくく、Webや編集用途に向く
- PDF:印刷や論文、レポートへの組み込みに向く
dpiは画像の解像度、bbox_inches="tight"はラベル周辺の余分な余白や切れを調整する指定です。
保存はplt.show()より前に行うと、実行環境による空画像のトラブルを避けやすくなります。
9. 日本語が□や文字化けになるとき
日本語フォントが環境に入っていない、またはMatplotlibがそのフォントを選択できていないと、 タイトルや軸ラベルが四角形で表示されることがあります。
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "Noto Sans CJK JP"
plt.rcParams["axes.unicode_minus"] = False
10. よくあるつまずきと対処法
| 症状 | 確認すること |
|---|---|
| グラフが表示されない | plt.show()を書いたか、実行環境のバックエンドが利用できるか確認する |
| ラベルが重なる・切れる | layout="constrained"、fig.tight_layout()、保存時のbbox_inches="tight"を試す |
| 折れ線が前後に飛ぶ | X軸の値、とくに日付が正しい順番に並んでいるか確認する |
| 数値なのに描画がおかしい | CSV読込後の列が文字列型になっていないかdf.dtypesで確認する |
| 日本語が四角になる | 日本語フォントをインストールし、font.familyで正しいフォント名を指定する |
| 大量作成でメモリが増える | 保存後にplt.close(fig)でFigureを閉じる |
11. Matplotlib・Excel・桜チャートの使い分け
どの方法が最適かは、作業の目的とコードを書くかどうかで変わります。
| ツール | 向いていること | 注意点 |
|---|---|---|
| Matplotlib | 定型処理の自動化、細かなデザイン調整、大量のグラフ作成、Python分析との連携 | Pythonコードと実行環境が必要 |
| Excel | セル上での集計・修正、数式、ピボット、画面を見ながらの細かな編集 | 同じ設定の繰り返し作業では手数が増えやすい |
| 桜チャート | Excelの表を貼り付け、列や色を選び、コードなしで標準的なグラフをすばやく作る | Matplotlibほど自由なコード単位のカスタマイズはできない |
Matplotlibは、自動化や再現性を重視する人に強い選択肢です。 一方、「まず手元の表をすぐグラフにしたい」「Python環境を用意せず試したい」という場合は、 Excelと同じように表を起点として操作できるWebツールが手軽です。
コードを書かずにグラフを作るなら
桜チャートでは、Excelやスプレッドシートの表をコピーして貼り付け、グラフの種類・列・色を選ぶだけで描画できます。 棒グラフ、折れ線、散布図、箱ひげ図、円グラフに対応しています。
桜チャートを無料で試す12. まとめ
- Matplotlibは、Pythonから多様なグラフを作成できるライブラリ
fig, ax = plt.subplots()でFigureとAxesを作ると管理しやすいplot、bar、scatter、hist、boxplotなどを目的に応じて使い分けるsavefigでPNG・SVG・PDFとして保存できる- 自動化と自由度ならMatplotlib、表から手軽に作るならExcelや桜チャートが向いている
次は手元の小さなデータを使い、折れ線グラフを1枚作るところから試してみてください。