matplotlibはPythonの可視化ライブラリで、折れ線・棒・円グラフなど多様な図を描け、統計やFP分析の結果を視覚的に整理できる便利なライブラリです。
ですが、グラフ内に日本語を使うと、たいてい最初は日本語を文字化けさせてしまいます。
OSにインストールされた日本語フォントを検索して選択し、文字化けしないようにするひな型を作成しました。
ソースコードのご使用は、自己責任でお願いします。
当サイトに掲載している計算ツールは、学習および一般的な情報提供を目的としています。
計算結果は、制度改正や個別の事情により実際とは異なる場合があり、かつ、本ツールでの計算結果をもとにして、申告や意思決定を行うことはできません。
また、個別具体的な税額計算や申告に関しては、必ず税理士その他の専門家にご相談ください。
詳細は免責事項ページをご覧ください。
なぜ文字化けするのか
matplotlibのデフォルトのフォントは、サンセリフ体のDejaVu Sansになっています。
すっきりとしていて見やすいフォントなので、グラフに使うフォントとしてはとてもいいです。
ただし、日本語文字に対応していませんので、日本語をグラフに描画すると文字化けしてしまうのです。
日本語文字化けの解消方法
日本語で正しくグラフ内で表示させるためには、日本語に対応しているフォントをmatplotlibに設定することで解決します。
matplotlibのfont_managerとrcParamsをimportして、実行環境にインストールされていると思われる日本語フォント名を順番に検索し、ヒットしたら設定するようにします。
OSにより、インストールされていると思われる日本語フォント名が異なるので、様々なフォント名を羅列しておくと汎用的です。
# --- 日本語フォント候補(OS横断・よくある名称)---
jp_font_candidates = [
# IPA / Noto 系
"IPAexGothic", "IPAGothic",
"Noto Sans CJK JP", "Noto Sans JP",
"Noto Serif CJK JP", "Noto Serif JP",
# Windows 系
"Yu Gothic", "YuGothic", "Meiryo", "MS Gothic", "MS PGothic",
# macOS 系
"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro",
# Linux ディストリの別名
"TakaoGothic", "VL PGothic"
]
その他のありがちなハマりごとも解消
その他、matplotlibでハマりがちな、2つのことも解消しておきます。
- グラフ外が透過してしまう
白で塗りつぶして保存するようにすれば、解消します。 - グラフ描画すると、PNGにグラフが描画されていない
PNGに保存してからグラフ描画する順番にすれば、解決します。
まとめると、こんな感じで記述すればよいです。
# --- ここがポイント:白背景をデフォルトに固定 ---
rcParams["savefig.transparent"] = False
rcParams["savefig.facecolor"] = "white"
rcParams["figure.facecolor"] = "white"
rcParams["axes.facecolor"] = "white"
...
...
# --- PNG保存(白で塗りつぶし)---
# 重要:transparent=False と facecolor を指定
fig.savefig(
"sample_plot.png",
dpi=300,
bbox_inches="tight",
transparent=False,
facecolor=fig.get_facecolor(),
edgecolor="white",
)
# --- 画面表示 ---
plt.show()
雛型ソースコードでささっと作業
日本語の文字化け、その他のありがちなハマりごとも解消する簡単なソースコードを作成しました。
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from matplotlib import font_manager, rcParams
def set_japanese_font():
jp_font_candidates = [
# IPA / Noto 系
"IPAexGothic", "IPAGothic",
"Noto Sans CJK JP", "Noto Sans JP",
"Noto Serif CJK JP", "Noto Serif JP",
# Windows 系
"Yu Gothic", "YuGothic", "Meiryo", "MS Gothic", "MS PGothic",
# macOS 系
"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro",
# Linux ディストリの別名
"TakaoGothic", "VL PGothic"
]
available_fonts = {f.name for f in font_manager.fontManager.ttflist}
for name in jp_font_candidates:
if name in available_fonts:
rcParams["font.family"] = name
rcParams["axes.unicode_minus"] = False
print(f"[INFO] 日本語フォントを設定しました: {name}")
break
else:
print("[WARN] 日本語フォントが見つかりませんでした。")
# --- ここがポイント:白背景をデフォルトに固定 ---
rcParams["savefig.transparent"] = False
rcParams["savefig.facecolor"] = "white"
rcParams["figure.facecolor"] = "white"
rcParams["axes.facecolor"] = "white"
set_japanese_font()
# --- プロット ---
x = [1, 2, 3, 4, 5]
y = [10, 8, 11, 9, 12]
fig = plt.figure(figsize=(6, 4), facecolor="white") # 念のため明示
ax = fig.add_subplot(111)
ax.plot(x, y, marker="o", label="サンプル系列")
ax.set_title("日本語も文字化けしません")
ax.set_xlabel("横軸(サンプル)")
ax.set_ylabel("縦軸(サンプル)")
ax.legend()
ax.annotate("ここ!", xy=(3, 11), xytext=(3.6, 11.5),
arrowprops=dict(arrowstyle="->", lw=1.2))
fig.tight_layout()
# --- PNG保存(白で塗りつぶし)---
# 重要:transparent=False と facecolor を指定
fig.savefig(
"sample_plot.png",
dpi=300,
bbox_inches="tight",
transparent=False,
facecolor=fig.get_facecolor(),
edgecolor="white",
)
# --- 画面表示 ---
plt.show()
実行結果は、以下です。
これらの記述をひな型として使うことで、matplotlib、もう迷いません。
