🔤 ステップ37: 日本語フォントの設定
グラフで日本語を正しく表示しよう!
ステップ35、36でグラフにタイトルや軸ラベルを追加しました。しかし、日本語が文字化けして「□□□」や「???」と表示されることがあります。今回は日本語を正しく表示する方法を学びます。
📖 このステップで学ぶこと
・日本語が表示されない原因
・Google Colabでの日本語フォント設定
・マイナス記号の文字化け対策
・設定を関数にまとめる方法
🎯 1. 日本語が表示されない問題
Matplotlibで日本語を使うと、文字化けすることがあります。これはMatplotlibがデフォルトで日本語フォントを持っていないためです。
🔰 文字化けの例
コード:日本語が文字化けする例
import matplotlib.pyplot as plt
months = ['1月', '2月', '3月', '4月', '5月']
sales = [120, 150, 180, 140, 200]
plt.plot(months, sales)
plt.title('月別売上推移') # ← 文字化けする
plt.xlabel('月') # ← 文字化けする
plt.ylabel('売上(万円)') # ← 文字化けする
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
🚨 文字化けの症状
・タイトルが「□□□□□」と表示される
・軸ラベルが「???」になる
・凡例の日本語が読めない
💡 なぜ文字化けするのか?
Matplotlibは英語圏で開発されたライブラリです。
デフォルトのフォントは日本語の文字を含んでいません。
そのため、日本語を表示しようとすると「表示できない」という意味で□や?が表示されます。
解決方法:日本語フォントをインストールして、Matplotlibに使うよう設定します。
🔧 2. Google Colabでの設定方法
Google Colabを使っている場合、以下のコードを実行するだけで日本語が使えるようになります。
🔰 一番簡単な方法
コード:日本語フォントの設定(基本)
# ステップ1:日本語フォントをインストール
!apt-get -y install fonts-ipafont-gothic
# ステップ2:Matplotlibの設定
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説(1行ずつ)
!apt-get -y install fonts-ipafont-gothic
・!:Google Colabでシステムコマンドを実行する記号
・apt-get install:ソフトウェアをインストールするコマンド
・-y:確認なしで自動的にインストール
・fonts-ipafont-gothic:日本語フォント「IPAゴシック」
import matplotlib
・Matplotlibライブラリをインポート
matplotlib.rc(‘font’, family=’IPAGothic’)
・matplotlib.rc():Matplotlibの設定を変更する関数
・‘font’:フォントの設定を変更
・family=’IPAGothic’:使用するフォントを指定
📌 実行のポイント
・このコードはノートブックの最初で1回だけ実行します
・実行後は、すべてのグラフで日本語が使えます
・新しいノートブックを開くたびに実行が必要です
・ランタイムを再起動した場合も再実行が必要です
📝 実際に使ってみよう
コード:日本語でグラフを作成
# 日本語フォントをインストール(最初に1回だけ)
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# 日本語でグラフを作成
months = ['1月', '2月', '3月', '4月', '5月']
sales = [120, 150, 180, 140, 200]
plt.plot(months, sales, marker='o')
plt.title('月別売上推移')
plt.xlabel('月')
plt.ylabel('売上(万円)')
plt.grid(linestyle='--', alpha=0.3)
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
日本語が正しく表示されたグラフが作成されます:
・タイトル「月別売上推移」が読める
・X軸ラベル「月」が読める
・Y軸ラベル「売上(万円)」が読める
⚙️ 3. より確実な設定方法
基本の設定で日本語が表示されない場合は、フォントキャッシュをクリアする必要があります。
📝 フォントキャッシュのクリア
コード:完全な設定手順
# ステップ1:日本語フォントをインストール
!apt-get -y install fonts-ipafont-gothic
# ステップ2:必要なモジュールをインポート
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.font_manager as fm
# ステップ3:フォントキャッシュをクリア
fm._rebuild()
# ステップ4:日本語フォントを設定
matplotlib.rc('font', family='IPAGothic')
print("日本語フォントの設定が完了しました!")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 新しいコードの解説
import matplotlib.font_manager as fm
・フォント管理のモジュールをインポート
・fmという短い名前で使えるようにする
fm._rebuild()
・フォントキャッシュをクリアして再構築
・新しくインストールしたフォントを認識させる
・これを実行しないと、フォントが見つからないことがある
実行結果
日本語フォントの設定が完了しました!
📝 マイナス記号の文字化け対策
日本語フォントを設定すると、マイナス記号(-)が文字化けすることがあります。これも合わせて設定しましょう。
コード:マイナス記号対策を追加
# 日本語フォントをインストール
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# マイナス記号の文字化け対策
matplotlib.rcParams['axes.unicode_minus'] = False
print("設定完了!日本語もマイナス記号も正しく表示されます")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
matplotlib.rcParams[‘axes.unicode_minus’] = False
・rcParams:Matplotlibの設定を格納している辞書
・‘axes.unicode_minus’:マイナス記号の表示設定
・False:Unicodeのマイナス記号を使わない(通常のハイフンを使う)
なぜ必要?
・日本語フォントにはUnicodeのマイナス記号が含まれていないことがある
・Falseにすると、通常のハイフン(-)で代用される
📝 マイナス記号のテスト
コード:マイナス値を含むグラフ
# 日本語フォント設定
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
matplotlib.rcParams['axes.unicode_minus'] = False
# マイナス値を含むデータ
months = ['12月', '1月', '2月', '3月']
temperature = [-2, -5, -3, 3]
# グラフを描く
plt.plot(months, temperature, marker='o', linewidth=2)
plt.title('冬季の平均気温')
plt.xlabel('月')
plt.ylabel('気温(℃)')
# 0度の線を追加
plt.axhline(y=0, color='red', linestyle='--', alpha=0.5)
plt.grid(linestyle='--', alpha=0.3)
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 新しいコードの解説
plt.axhline(y=0, color=’red’, linestyle=’–‘, alpha=0.5)
・axhline:水平線(horizontal line)を描く
・y=0:y=0の位置に線を引く
・気温のグラフで0度の基準線として便利
実行結果
Y軸に「-5」「-3」「-2」などのマイナス値が正しく表示されます。
📊 4. 実践例:日本語を使ったグラフ
📘 例1:月別売上グラフ
コード:売上とコストの比較
# フォント設定(最初に実行)
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
matplotlib.rcParams['axes.unicode_minus'] = False
# データの準備
months = ['1月', '2月', '3月', '4月', '5月', '6月']
revenue = [150, 180, 220, 200, 250, 280]
cost = [120, 140, 160, 150, 180, 200]
# グラフ作成
plt.figure(figsize=(10, 6))
plt.plot(months, revenue, marker='o', label='売上', linewidth=2)
plt.plot(months, cost, marker='s', label='コスト', linewidth=2)
plt.title('月別売上とコストの推移', fontsize=16)
plt.xlabel('月', fontsize=12)
plt.ylabel('金額(万円)', fontsize=12)
plt.legend(fontsize=11)
plt.grid(linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
日本語がきれいに表示された売上グラフが作成されます。
・タイトル「月別売上とコストの推移」
・凡例「売上」「コスト」
・軸ラベル「月」「金額(万円)」
📘 例2:棒グラフ(都道府県別データ)
コード:都道府県別人口
# フォント設定(最初に実行)
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# データの準備
prefectures = ['東京', '大阪', '愛知', '福岡', '北海道']
population = [1400, 880, 755, 510, 525]
# 棒グラフを作成
plt.figure(figsize=(10, 6))
plt.bar(prefectures, population, color='skyblue', edgecolor='black')
plt.title('都道府県別人口', fontsize=16)
plt.xlabel('都道府県', fontsize=12)
plt.ylabel('人口(万人)', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 新しいコードの解説
plt.bar(prefectures, population)
・棒グラフを描く関数
・第1引数:X軸のカテゴリ(都道府県名)
・第2引数:棒の高さ(人口)
color=’skyblue’
・棒の色を水色に
edgecolor=’black’
・棒の枠線を黒に
plt.grid(axis=’y’)
・Y軸方向のみグリッド線を表示
📘 例3:円グラフ(カテゴリ別データ)
コード:支出内訳の円グラフ
# フォント設定(最初に実行)
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# データの準備
categories = ['食費', '住居費', '光熱費', '交通費', 'その他']
expenses = [30, 35, 10, 15, 10]
# 円グラフを作成
plt.figure(figsize=(8, 8))
plt.pie(expenses, labels=categories, autopct='%1.1f%%', startangle=90)
plt.title('月々の支出内訳', fontsize=16)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 新しいコードの解説
plt.pie(expenses, labels=categories)
・円グラフを描く関数
・第1引数:各項目の値
・labels:各項目のラベル
autopct=’%1.1f%%’
・パーセンテージを自動で表示
・’%1.1f%%’は「小数点1桁の%表示」
startangle=90
・円グラフの開始角度(90度=上から開始)
🔄 5. 設定を関数にまとめる
毎回同じコードを書くのは面倒です。関数にまとめると便利です。
📝 日本語フォント設定の関数
コード:設定関数を作成
def setup_japanese_font():
"""日本語フォントを設定する関数"""
import subprocess
import matplotlib
import matplotlib.font_manager as fm
# フォントをインストール(出力を非表示に)
subprocess.run(['apt-get', '-y', 'install', 'fonts-ipafont-gothic'],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
# フォントキャッシュをクリア
fm._rebuild()
# 日本語フォントを設定
matplotlib.rc('font', family='IPAGothic')
matplotlib.rcParams['axes.unicode_minus'] = False
print("✅ 日本語フォントの設定が完了しました")
# 使い方:最初に1回だけ実行
setup_japanese_font()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 コードの解説
def setup_japanese_font():
・setup_japanese_fontという名前の関数を定義
・一度定義すれば、何度でも呼び出せる
“””日本語フォントを設定する関数”””
・ドキュメント文字列(docstring)
・関数の説明を書く
subprocess.run([…])
・Pythonからシステムコマンドを実行
・stdout=subprocess.DEVNULL:出力を非表示に
print(“✅ …”)
・設定完了のメッセージを表示
実行結果
✅ 日本語フォントの設定が完了しました
📝 関数を使ってグラフを作成
コード:関数を使った例
import matplotlib.pyplot as plt
# 日本語フォント設定(最初に1回)
setup_japanese_font()
# グラフを作成
subjects = ['国語', '数学', '英語', '理科', '社会']
scores = [85, 92, 78, 88, 90]
plt.figure(figsize=(10, 6))
plt.bar(subjects, scores, color='lightgreen', edgecolor='black')
plt.title('科目別テスト結果', fontsize=16)
plt.xlabel('科目', fontsize=12)
plt.ylabel('得点', fontsize=12)
plt.ylim(0, 100)
plt.grid(axis='y', linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
🐛 6. トラブルシューティング
日本語フォントがうまく表示されない場合の対処法です。
🔴 問題1:フォントがインストールできない
🚨 エラー例
E: Unable to locate package fonts-ipafont-gothic
💡 解決方法
パッケージリストを更新してから再実行します:
!apt-get update
!apt-get -y install fonts-ipafont-gothic
※ 画面が小さい場合は、コードブロックを横にスクロールできます
🔴 問題2:設定したのに日本語が表示されない
🚨 考えられる原因
・フォントキャッシュが古い
・設定コードがグラフより後に実行されている
・ランタイムの問題
💡 解決方法
1. fm._rebuild()を実行してフォントキャッシュをクリア
2. セルを上から順番に実行し直す
3. 「ランタイム」→「ランタイムを再起動」を選択して再実行
🔴 問題3:マイナス記号が表示されない
💡 解決方法
以下のコードを追加してください:
matplotlib.rcParams['axes.unicode_minus'] = False
※ 画面が小さい場合は、コードブロックを横にスクロールできます
📝 確認用のテストコード
日本語フォントが正しく設定されているか確認するコードです。
コード:設定確認テスト
# 日本語フォントが正しく設定されているか確認
import matplotlib.pyplot as plt
# テスト1:日本語テスト
test_data = [1, 2, 3, 4, 5]
plt.plot(test_data)
plt.title('日本語テスト:これが読めればOK!')
plt.xlabel('横軸ラベル')
plt.ylabel('縦軸ラベル')
plt.show()
# テスト2:マイナス記号テスト
negative_data = [-5, -3, -1, 1, 3, 5]
plt.plot(negative_data, marker='o')
plt.title('マイナス記号テスト')
plt.axhline(y=0, color='red', linestyle='--')
plt.grid(True, alpha=0.3)
plt.show()
print("両方のグラフで日本語とマイナス記号が読めればOKです!")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
📝 練習問題
問題1:日本語フォント設定(初級)
📋 問題
Google Colabで日本語フォントを設定し、「こんにちは、Python!」というタイトルのグラフを作成してください。
解答例を見る
コード
# 日本語フォント設定
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# グラフ作成
data = [1, 3, 2, 5, 4]
plt.plot(data)
plt.title('こんにちは、Python!')
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題2:曜日別データのグラフ(初級)
📋 問題
曜日を日本語で表示した売上グラフを作成してください。
days = ['月曜', '火曜', '水曜', '木曜', '金曜']
sales = [120, 150, 130, 180, 200]
※ 画面が小さい場合は、コードブロックを横にスクロールできます
解答例を見る
コード
# 日本語フォント設定
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# データ
days = ['月曜', '火曜', '水曜', '木曜', '金曜']
sales = [120, 150, 130, 180, 200]
# グラフ作成
plt.plot(days, sales, marker='o')
plt.title('曜日別売上')
plt.xlabel('曜日')
plt.ylabel('売上(万円)')
plt.grid(linestyle='--', alpha=0.3)
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題3:マイナス値を含むグラフ(中級)
📋 問題
マイナスの値を含む気温データのグラフを作成してください。マイナス記号が正しく表示されるように設定してください。
months = ['12月', '1月', '2月', '3月']
temperature = [-2, -5, -3, 3]
※ 画面が小さい場合は、コードブロックを横にスクロールできます
解答例を見る
コード
# 日本語フォント設定(マイナス記号対応)
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
matplotlib.rcParams['axes.unicode_minus'] = False
# データ
months = ['12月', '1月', '2月', '3月']
temperature = [-2, -5, -3, 3]
# グラフ作成
plt.plot(months, temperature, marker='o', linewidth=2)
plt.title('冬季の平均気温')
plt.xlabel('月')
plt.ylabel('気温(℃)')
plt.axhline(y=0, color='red', linestyle='--', alpha=0.5)
plt.grid(linestyle='--', alpha=0.3)
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題4:複数データの比較グラフ(中級)
📋 問題
3つの店舗の売上を比較するグラフを作成し、日本語の凡例を表示してください。
months = ['4月', '5月', '6月']
tokyo = [200, 220, 250]
osaka = [180, 210, 230]
nagoya = [150, 170, 200]
※ 画面が小さい場合は、コードブロックを横にスクロールできます
解答例を見る
コード
# 日本語フォント設定
!apt-get -y install fonts-ipafont-gothic
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('font', family='IPAGothic')
# データ
months = ['4月', '5月', '6月']
tokyo = [200, 220, 250]
osaka = [180, 210, 230]
nagoya = [150, 170, 200]
# グラフ作成
plt.figure(figsize=(10, 6))
plt.plot(months, tokyo, marker='o', label='東京店', linewidth=2)
plt.plot(months, osaka, marker='s', label='大阪店', linewidth=2)
plt.plot(months, nagoya, marker='^', label='名古屋店', linewidth=2)
plt.title('店舗別売上比較', fontsize=16)
plt.xlabel('月', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.legend(fontsize=11)
plt.grid(linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
問題5:設定関数を作成(上級)
📋 問題
日本語フォント設定を自動で行う関数を作成し、それを使って折れ線グラフ、棒グラフ、円グラフの3つを作成してください。
解答例を見る
コード
def setup_japanese_font():
"""日本語フォントを設定する関数"""
import subprocess
import matplotlib
import matplotlib.font_manager as fm
subprocess.run(['apt-get', '-y', 'install', 'fonts-ipafont-gothic'],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
fm._rebuild()
matplotlib.rc('font', family='IPAGothic')
matplotlib.rcParams['axes.unicode_minus'] = False
print("✅ 日本語フォント設定完了")
import matplotlib.pyplot as plt
# フォント設定
setup_japanese_font()
# 1. 折れ線グラフ
months = ['1月', '2月', '3月']
sales = [100, 120, 150]
plt.figure(figsize=(8, 5))
plt.plot(months, sales, marker='o')
plt.title('売上推移')
plt.xlabel('月')
plt.ylabel('売上(万円)')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 2. 棒グラフ
products = ['商品A', '商品B', '商品C']
quantities = [50, 80, 65]
plt.figure(figsize=(8, 5))
plt.bar(products, quantities, color='skyblue')
plt.title('商品別販売数')
plt.xlabel('商品')
plt.ylabel('販売数')
plt.tight_layout()
plt.show()
# 3. 円グラフ
categories = ['食品', '衣類', '雑貨']
ratios = [40, 35, 25]
plt.figure(figsize=(8, 8))
plt.pie(ratios, labels=categories, autopct='%1.1f%%')
plt.title('カテゴリ別売上比率')
plt.tight_layout()
plt.show()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
🎯 このステップのまとめ
✅ 学んだこと
✓ Matplotlibで日本語を表示するにはフォント設定が必要
✓ !apt-get -y install fonts-ipafont-gothicでフォントをインストール
✓ matplotlib.rc(‘font’, family=’IPAGothic’)で設定
✓ マイナス記号の文字化けにはrcParams[‘axes.unicode_minus’] = False
✓ 設定を関数にまとめると便利
✓ 新しいノートブックでは毎回設定が必要
💡 次のステップに進む前に確認
以下のことができるようになったか確認しましょう:
□ 日本語フォントをインストールできる
□ 日本語が正しく表示されるグラフを作れる
□ マイナス記号の設定ができる
□ フォント設定を関数化できる
これらができたら、次のステップに進みましょう!
❓ よくある質問
Q1: ノートブックを開くたびに設定が必要ですか?
A: はい、新しいノートブックやランタイムを再起動すると設定はリセットされます。毎回、最初のセルで日本語フォント設定を実行してください。
Q2: IPAGothic以外のフォントは使えますか?
A: はい、他の日本語フォント(例:fonts-noto-cjk)も使えます。ただし、IPAGothicが最も簡単で安定しています。
Q3: ローカル環境(自分のPC)ではどうすればいいですか?
A: Windows/Mac/Linuxそれぞれで設定方法が異なります。Google Colabを使うのが最も簡単です。ローカル環境では、システムにインストールされている日本語フォント(例:「游ゴシック」「MS Gothic」など)を指定します。
Q4: フォント設定後もまだ文字化けします
A: 以下を試してください:
1. fm._rebuild()でフォントキャッシュをクリア
2. ランタイムを再起動
3. セルを上から順番に実行し直す
Q5: エラーメッセージがたくさん出ますが大丈夫ですか?
A: !apt-getコマンドは多くの情報を出力しますが、最後に完了と表示されていればOKです。エラーでない限り問題ありません。
学習メモ
Pythonデータ分析入門 - Step 37