【2026年最新】Geminiグラフ生成で日本語が文字化け・豆腐化する原因とフォント注入による完全解決手順

Google Geminiに売上データを渡して「棒グラフを作って」と指示した際、グラフの日本語がすべて四角い枠(□□□□、通称「豆腐」)に文字化けする現象に悩んでいませんか?

慌てて「日本語が四角になっているから直して!」と再指示しても、Gemini自身が !pip install japanize-matplotlib で自爆してしまいます。

何度やり直してもエラーが続く無限ループに陥って困ってしまいますよね。

結論からお伝えすると、この文字化けはMatplotlib既定フォント(DejaVu Sans)の日本語欠落と、隔離サンドボックスの pip install 完全遮断が原因です。

💡 この記事でわかること(3秒まとめ)
  • 豆腐化(□□□)の真因:既定フォント DejaVu Sans の日本語グリフ欠落(警告84件)とサンドボックスの pip 通信遮断
  • 10秒で直すプロンプト術:「pip禁止+FontProperties で既存日本語フォントを動的検索して適用せよ」と指示する
  • フォント不在時の最終兵器:「HTML/SVGまたはGemini Canvasで出力して」と指示すれば端末フォントで文字化け0%!

手元の検証実機(Windows 11 Pro 24H2 ビルド 26100.9711 / Google Chrome最新版 / Gemini 2.5 Pro Code Execution / Python 3.13.5 / Matplotlib 3.10.0)で、実際に文字化け警告の測定と解消手順を検証しました。

大きな赤枠と丸番号(①・②)付きの拡大画面とコピペ用プロンプトに沿って進めるだけで、誰でも1発で綺麗な日本語グラフを出力できるようになりますよ。

【2026年最新】Geminiのグラフ生成で日本語が四角い「豆腐(□□□)」に文字化けする原因は?

Geminiグラフ生成の「日本語文字化け(□□□)」解決全体像
▲ 外部pipインストールを禁止し、コンテナ内の既存フォントをFontPropertiesで掴めば1発で解決します

Geminiのグラフで日本語が四角い「豆腐(□□□)」に化ける原因は、既定フォント「DejaVu Sans」に日本語グリフが0文字しか存在しないためです。

さらに隔離サンドボックスの通信遮断により、外部フォントの pip install が100%失敗することも重なっています。

Google公式仕様(Google AI:コードの実行)の通り、Geminiは隔離Linuxコンテナ内でPythonを実行しています。

Matplotlib公式仕様(Fonts in Matplotlib)でも、既定フォントは欧文用であることが明記されています。

実機画面で①日本語グラフ指示を出すと②タイトルと軸ラベルが四角い枠(□□□)に文字化けする現象を確認した画面
▲ STEP 1:①日本語でグラフ作成を指示すると、②グラフのタイトルや軸ラベルがすべて四角い枠(□□□)に化けてしまいます
実機画面で①既定フォントDejaVu Sansには日本語が無く②UserWarningが84件発生する原因を確認した画面
▲ STEP 2:①既定フォント「DejaVu Sans」には日本語が無く、②裏側では「UserWarning: Glyph missing」が84件発生しています

実際に既定設定のまま棒グラフを描画すると、上の拡大画面(赤枠①・②)の通り日本語がすべて四角(□□□□)に化けます。

このとき裏側では UserWarning: Glyph ... missing from font(s) DejaVu Sans. が84件連続で発生しています。

実機画面で①サンドボックスの通信遮断でpipが失敗し②Python 3.12以降のdistutils廃止でもクラッシュする原因を確認した画面
▲ STEP 3:①外部通信遮断でpip installが失敗し、②さらにPython 3.12以降の「distutils廃止」でもエラーになります

また、Google Colab(Colab公式)で定番の japanize-matplotlib もGeminiでは使えません。

STEP 3写真の通り、「① 通信遮断によるpip失敗」と「② Python 3.12以降の distutils 廃止」の二重エラーで100%止まります。

発生している文字化け・エラー現象裏側で起きている技術的真因(実機測定値)正しい解決アプローチ
① タイトルや軸がすべて「□□□」になる既定フォント DejaVu Sans に日本語グリフが0字(警告84件発生)コンテナ内の既存日本語フォントを FontProperties で直接指定する
② pip install japanize-matplotlib が失敗Geminiサンドボックスの外部通信遮断+Python 3.12の distutils 廃止外部pip導入を禁止し、標準ライブラリ(font_manager)のみで解決する
③「直して」と再指示すると無限ループするGeminiが自分の学習データから再度 !pip install を書いて自爆するプロンプトで 「pip禁止+FontProperties動的検索」を明示指示する

追加インストール不要!コンテナ内の日本語フォントを自動検出して10秒で文字化けを直す手順は?

Geminiでグラフの文字化けを10秒で直すには、プロンプト末尾に「pip install を禁止し、FontProperties で既存日本語フォントを適用せよ」と1行追記します。

追加パッケージ0個で、タイトルから軸ラベルまで鮮明な日本語が出力されます。

技術コミュニティ(Qiita:Gemini記事・Zenn:Matplotlib解説)でも注目されている手法です。

コンテナ内の /usr/share/fonts/ や fontManager.ttflist にある既存CJKフォントを直接掴めば、通信なしで100%日本語を描画できます。

実機画面で①pipインストールを禁止し②FontPropertiesでシステム内の日本語フォントを指定させるプロンプト画面
▲ STEP 4:①FontPropertiesによる動的フォント指定と、②外部pipインストールの禁止をプロンプトで明示します
実機画面で①候補パスとttflistを走査し②FontPropertiesオブジェクトを返すget_japanese_font関数を定義した画面
▲ STEP 5:①標準Linuxフォントパスの存在確認と、②fontManager.ttflistの全体スキャンで確実に日本語フォントを掴みます
実機画面で①タイトルも軸ラベルも100%日本語で鮮明に描画され②UserWarningも0件に根絶された検証結果画面
▲ STEP 6:①文字化け0文字・警告0件で「2026年度 第1四半期 商品別売上実績」が鮮明に描画されました!
  1. Geminiにグラフ作成を頼む際、すぐ下の「日本語文字化け防止プロンプト」をコピーして指示文の最後に貼り付けます(STEP 4写真の赤枠①・②)。
  2. より確実に一発成功させたい場合は、下の「get_japanese_font() 自動検出Pythonテンプレート」を添えて「このロジックで描画して」と指示します(STEP 5写真の赤枠①・②)。
  3. 実行すると、グリフ欠落警告が84件から「0件」へ完全にゼロ化(STEP 6写真の赤枠①・②)し、タイトルから軸ラベルまで鮮明な日本語グラフが出力されます!
💻 Geminiチャット用:コピペで日本語文字化け(□□□)を100%防ぐフォント注入プロンプト
以下のデータをMatplotlibでグラフ化してください。
【必須要件(日本語文字化け防止)】:
1. 外部ライブラリ(japanize-matplotlib等)の pip install や apt-get はサンドボックスエラーになるため絶対に実行しないでください。
2. Python標準の matplotlib.font_manager.FontProperties と fontManager.ttflist を使用し、コンテナ内にプリインストールされている日本語フォント(Noto Sans CJK JP, IPAGothic, TakaoPGothic, VL Gothic 等、または /usr/share/fonts/ 配下の .ttc/.ttf/.otf)を動的に自動検出してください。
3. 検出した FontProperties オブジェクトを、タイトル(set_title)・X軸ラベル(set_xlabel)・Y軸ラベル(set_ylabel)・目盛り(set_xticklabels)・凡例(legend)に明示的に適用して描画してください。
💻 Gemini Code Execution完全対応:pip不要の日本語フォント自動検出&Matplotlib描画テンプレート
import os
import matplotlib.pyplot as plt
from matplotlib import font_manager

# 1. サンドボックス内の利用可能な日本語フォントを自動検出する関数(pip不要)
def get_japanese_font():
    font_candidates = [
        "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",
        "/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc",
        "/usr/share/fonts/truetype/ipafont-gothic/ipag.ttf",
        "/usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf",
        "/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf",
        "C:/Windows/Fonts/meiryob.ttc",
        "C:/Windows/Fonts/msgothic.ttc",
    ]
    for path in font_candidates:
        if os.path.exists(path):
            return font_manager.FontProperties(fname=path)
    for f in font_manager.fontManager.ttflist:
        if any(k in f.name.lower() for k in ["cjk", "japanese", "gothic", "mincho", "meiryo", "noto"]):
            return font_manager.FontProperties(fname=f.fname)
    return None

# 2. フォントプロパティの取得とグローバル設定
jp_font = get_japanese_font()
plt.rcParams["axes.unicode_minus"] = False
if jp_font:
    plt.rcParams["font.family"] = jp_font.get_name()

# 3. グラフ描画(日本語タイトル・軸ラベル・データラベルを鮮明に出力)
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
categories = ["商品A", "商品B", "商品C", "商品D"]
sales = [320, 480, 290, 560]
bars = ax.bar(categories, sales, color="#2563eb", width=0.55)

if jp_font:
    ax.set_title("2026年度 第1四半期 商品別売上実績", fontproperties=jp_font, fontsize=15, pad=12)
    ax.set_xlabel("商品カテゴリ", fontproperties=jp_font, fontsize=12)
    ax.set_ylabel("売上高(万円)", fontproperties=jp_font, fontsize=12)
    ax.set_xticks(range(len(categories)))
    ax.set_xticklabels(categories, fontproperties=jp_font, fontsize=11)
    for bar, val in zip(bars, sales):
        ax.text(bar.get_x() + bar.get_width() / 2, val + 12, f"{val}万円", ha="center", fontproperties=jp_font, fontsize=11)
else:
    ax.set_title("Q1 Sales Performance (2026)", fontsize=15, pad=12)
    ax.set_xlabel("Product Category", fontsize=12)
    ax.set_ylabel("Sales (10k JPY)", fontsize=12)

ax.set_ylim(0, 650)
ax.grid(axis="y", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.show()
検証項目(実機測定)Before(デフォルト:DejaVu Sans)After(FontProperties自動注入プロトコル)
1. グラフ内の日本語表示タイトル・軸・凡例がすべて □□□□(豆腐) に化けるタイトル・軸ラベル・単位まで100%鮮明な日本語で描画される
2. グリフ欠落警告(UserWarning)1回の描画で 84件の Glyph missing 警告が発生警告 0件(エラー・警告ともに完全ゼロ)
3. 外部通信・pipインストールjapanize-matplotlib の導入で通信エラー&distutilsクラッシュ外部通信 0回・追加パッケージ 0個(オフライン環境で100%動作)

【2026年最新】Seaborn・Pandas利用時の設定やフォント不在時にHTML/SVGで100%日本語表示する回避策は?

SeabornやPandasの df.plot() を使う場合は、plt.rcParams['font.family'] = jp_font.get_name() の1行でグローバル設定すれば文字化けを防げます。

万が一コンテナ内に日本語フォントが0個の環境でも、HTML/SVG(またはGemini Canvas)形式で出力させれば文字化け率は0%になります。

Matplotlib公式ガイド(Matplotlib公式:Fonts in Matplotlib)の通り、rcParams 一括設定とブラウザ側描画(HTML/SVG)を組み合わせればどんな環境でも安心です。

実機画面で①rcParamsにフォント名を登録し②フォント不在時は英語ラベルへ自動切替する設定を確認した画面
▲ STEP 7:①rcParams[‘font.family’] でグローバル登録し、②万が一フォントが無い環境では英語ラベルへ自動フォールバックさせます
実機画面で①HTML/SVGまたはGemini Canvasで出力させ②PC/スマホ標準フォントで描画させる手順を確認した画面
▲ STEP 8:①「HTML/SVGまたはGemini Canvasで出力して」と指示すれば、②端末標準フォントで100%文字化けゼロになります

手元の実機で「豆腐化と警告84件の測定 ➔ FontProperties注入による警告0件のグラフ完成」までを撮影した実機操作動画もご覧ください。

▲ 【実機操作動画】Geminiのグラフ生成で日本語文字化け(□□□)をFontProperties自動注入で解消するまでの実際の流れ

  1. SeabornやPandasを使う場合:jp_font = get_japanese_font() の直後に plt.rcParams['font.family'] = jp_font.get_name()(STEP 7写真の赤枠①) を1行入れてグローバル適用します。
  2. 英語ラベルへの安全フォールバック:万が一フォントが0個の環境でも豆腐を出さないよう、else: 分岐で英語タイトルへ切り替えるコードを入れておきます(STEP 7写真の赤枠②)。
  3. HTML/SVG・Gemini Canvasによる100%回避策:「Python画像ではなく、HTML/SVG形式またはGemini Canvasでグラフを作成して」(STEP 8写真の赤枠①・②)と指示すれば、PCやスマホの標準フォントで美しく表示されます。
解決プロトコルの種類具体的な指示・設定方法向いている用途・メリット
① プロトコル1:FontProperties注入指示プロンプト末尾に 「pip禁止+FontPropertiesで既存日本語フォント適用」 を追記◎ 普段のGeminiチャットで最も手軽(10秒で文字化け解消)
② プロトコル2:自動検出Pythonテンプレートget_japanese_font() 関数+rcParams設定コード をそのまま渡す◎ CSVデータ分析・Seaborn・Gemini API(code_execution)で100%確実
③ プロトコル3:HTML/SVG・Canvas描画「PythonではなくHTML/SVGまたはCanvasでグラフを出して」 と指示◎ コンテナ内にフォントが0個の環境でも端末フォントで100%日本語表示

あわせて、Geminiの標準モデル切り替え手順も確認しておくと作業効率が上がります。

詳しくは 【2026年最新】Gemini 3 Flashへの切り替え方法と規定モデル変更手順!高速応答を使いこなす設定ガイド で解説しています。

また、AIの分析結果をPowerPointスライドへ自動出力する手順も実務で大変便利です。

具体的なやり方は 【2026年最新】ChatGPTでパワポ(PPTX)を自動作成する手順!スライド出力のやり方と崩れないコツ をご覧ください。

▼ 【3秒診断】Geminiグラフ文字化け(豆腐化)即解決チェックリスト
チェック 1 GeminiでPython集計しつつ、グラフ画像の日本語が「□□□」になるのを今すぐ止めたいですか?
■ はい(Pythonで日本語グラフ画像を出力したい)
本記事の「pip禁止+FontProperties注入プロンプト(またはget_japanese_font関数)」を貼り付ければ1発で直ります!
□ いいえ(フォント不在エラー・別形式希望)
すぐ下の「チェック 2」へ進んでください ➔
チェック 2 コンテナに日本語フォントが入っていない、または拡大しても綺麗なグラフが欲しいですか?
■ はい(100%確実に日本語で表示したい)
「PythonではなくHTML/SVG形式またはGemini Canvasでグラフを作成して」と指示すれば文字化け0%で解決!
□ Seaborn / Pandasで一括設定したい
「plt.rcParams[‘font.family’] = jp_font.get_name()」を1行追加すれば全グラフに一括適用されます!
【3秒診断】Geminiグラフ文字化け(豆腐化)即解決チャート
▲ 手軽に直すなら「FontProperties注入指示」、定型化なら「get_japanese_font関数」、フォント不在なら「HTML/SVG出力」で即解決できます

【2026年版】Geminiのグラフ生成と日本語フォント設定でよくある質問(FAQ)は?

GeminiのPythonコード実行における日本語グラフ生成についてよく寄せられる質問3件に、公式仕様(Google AI for Developers:コードの実行)と実機検証データに基づき回答します。

サンドボックスの仕組みを知っておけば、無駄な再指示ループを100%防げます。

Q1. Geminiに「japanize-matplotlibをインストールして直して」と指示するとエラーになるのはなぜですか?

理由は2つあります。1つ目は、GeminiのPython実行環境(gVisor隔離コンテナ)は外部インターネット通信が完全遮断されており、pip install が100%失敗する仕様だからです。

2つ目は、Python 3.12以降で distutils が廃止されたため、japanize-matplotlib が ModuleNotFoundError: No module named 'distutils' でクラッシュするためです。必ず本記事の FontProperties 方式を使ってください。

Q2. Seaborn(sns.barplot等)やPandasの df.plot() でグラフを作る時も同じ方法で直せますか?

はい、直せます。SeabornやPandasのプロット機能も内部ではMatplotlibを呼び出しています。

plt.rcParams["font.family"] = jp_font.get_name() と plt.rcParams["axes.unicode_minus"] = False の2行を実行させれば、軸ラベルや凡例まで一括で日本語表示されます。

Q3. 万が一コンテナ内に日本語フォントファイルが1つも入っていない場合はどうすればいいですか?

プロンプトで「PythonのMatplotlib画像ではなく、HTML/SVG形式(またはGemini Canvas)でグラフを描画して」と指示してください。

ブラウザ側でレンダリングされるHTML/SVGなら、お使いのパソコンやスマホの標準フォント(メイリオ・游ゴシック・ヒラギノ)が自動適用されるため、文字化けは原理的に0%になります。

🔧 Gemini「グラフ日本語文字化け(□□□)」ゼロ化プロンプト&Pythonコード生成ツール(ブラウザ上で即座に診断&1クリック配布)
やりたいグラフ作成方法にチェックを入れると、Geminiのコード実行サンドボックスで文字化け(豆腐化)を100%防ぐ指示文とPythonコードが即座に出力されます。
現在の診断ステータス:チェックを入れると最適な復旧ルートと完了率を自動算出します(0 / 3 完了)
📋 Geminiグラフ文字化け根絶:FontProperties自動検出Pythonテンプレート(1クリックでコピー&保存可能)
import os
import matplotlib.pyplot as plt
from matplotlib import font_manager

# 1. サンドボックス内の利用可能な日本語フォントを自動検出する関数(pip不要)
def get_japanese_font():
    font_candidates = [
        "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",
        "/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc",
        "/usr/share/fonts/truetype/ipafont-gothic/ipag.ttf",
        "/usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf",
        "/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf",
        "C:/Windows/Fonts/meiryob.ttc",
        "C:/Windows/Fonts/msgothic.ttc",
    ]
    for path in font_candidates:
        if os.path.exists(path):
            return font_manager.FontProperties(fname=path)
    for f in font_manager.fontManager.ttflist:
        if any(k in f.name.lower() for k in ["cjk", "japanese", "gothic", "mincho", "meiryo", "noto"]):
            return font_manager.FontProperties(fname=f.fname)
    return None

# 2. フォントプロパティの取得とグローバル設定
jp_font = get_japanese_font()
plt.rcParams["axes.unicode_minus"] = False
if jp_font:
    plt.rcParams["font.family"] = jp_font.get_name()

# 3. グラフ描画(日本語タイトル・軸ラベル・データラベルを鮮明に出力)
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
categories = ["商品A", "商品B", "商品C", "商品D"]
sales = [320, 480, 290, 560]
bars = ax.bar(categories, sales, color="#2563eb", width=0.55)

if jp_font:
    ax.set_title("2026年度 第1四半期 商品別売上実績", fontproperties=jp_font, fontsize=15, pad=12)
    ax.set_xlabel("商品カテゴリ", fontproperties=jp_font, fontsize=12)
    ax.set_ylabel("売上高(万円)", fontproperties=jp_font, fontsize=12)
    ax.set_xticks(range(len(categories)))
    ax.set_xticklabels(categories, fontproperties=jp_font, fontsize=11)
    for bar, val in zip(bars, sales):
        ax.text(bar.get_x() + bar.get_width() / 2, val + 12, f"{val}万円", ha="center", fontproperties=jp_font, fontsize=11)
else:
    ax.set_title("Q1 Sales Performance (2026)", fontsize=15, pad=12)
    ax.set_xlabel("Product Category", fontsize=12)
    ax.set_ylabel("Sales (10k JPY)", fontsize=12)

ax.set_ylim(0, 650)
ax.grid(axis="y", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.show()

📬 新着記事をメールでお届けします

記事公開時にメールでお知らせします。週数本・無料・いつでも 1 クリックで解除できます。

uri uri

uri uriと申します。生成AI専門ブログ「生成AIニスト」運営者。 ChatGPT・Gemini・Claudeなど主要な生成AIを自分で契約し、毎日実際に触って検証しています。記事の手順やエラー対処は、必ず自分の画面で再現し、実機のスクリーンショットで確かめてから公開。料金や仕様は提供元の公式情報で裏取りし、いつ時点の情報かを明記します。「読んだ人が同じ画面で再現できること」を基準に書いています。