Claude CodeやCursorなどのAIエージェントにPython(Matplotlib等)を用いたグラフ描画を指示すると、デフォルト設定の原色配色や余白不足、凡例の重なりが生じ、論文やプレゼン資料に耐えうる品質に達しない課題が頻発します。研究コラボレーション基盤のalphaXivが公開したエージェントスキル「orx-figures」は、視覚的階層や色彩設計、タイポグラフィの厳格な規律をAIに適用し、出版水準の図表を自動生成する仕組みです。
本記事では、orx-figuresの設計原則と内部構造、Claude Code等のエージェントへの導入手順、および標準プロンプトとスキル適用後における出力グラフの対比検証コードを詳しく解説します。

なぜAIが描くグラフは「野暮ったい」のか?デフォルトMatplotlibの3大弱点
AIに「グラフを作成して」と指示したとき、ほとんどのモデルはPythonの matplotlib.pyplot を使った最も単純なコードを生成します。その結果として出力されるグラフが野暮ったく見えるのには、明確な3つの理由が存在します。
① 原色過多で刺激の強いカラーパレット
Matplotlibの初期設定カラーサイクル(Tableau 10ベースのBlue #1f77b4 や Orange #ff7f0e)は、彩度が高すぎて複数の系列が並んだ際に視覚的な喧嘩を起こします。学術論文やビジネスレポートでは、目に優しいスレート調のネイビーやグレーを基調とし、最も伝えたい主要系列のみを鮮やかなアクセントカラー(コーラルやエメラルド)で引き立たせるのが鉄則ですが、標準AIはそのような「視線誘導」を意識できません。
② 余計な境界線(上・右スパイン)とグリッドノイズ
デフォルトのMatplotlibは、プロットエリアの四方を太い黒線(Spines)で囲み、まるで檻の中にデータを閉じ込めたようなレイアウトになります。情報デザインの巨匠エドワード・タフテ(Edward Tufte)が提唱した「データインク比率(Data-Ink Ratio:インク全体に占める実質的データの割合)」の観点から言えば、上辺と右辺の枠線は単なる視覚的ノイズに過ぎません。
③ 四角い枠に閉じ込められた凡例(Legend)
AIが生成するグラフの多くは、右上に四角い枠付きの凡例ボックスを自動配置します。この凡例がプロットされたデータ曲線と重なって数値を隠してしまったり、読者が「凡例と折れ線を何度も視線往復させて照合しなければならない」という認知負荷を生み出します。プロフェッショナルな作図では、凡例ボックスを撤廃し、曲線の右端に直接系列名ラベルを配置(Direct Labeling)するのが現代の標準です。
【対比表】デフォルト描画 vs orx-figures の設計基準
alphaXivの「orx-figures」がもたらすスタイリング改善は、単なる表面的な色の変更にとどまりません。科学論文(Nature/Science誌の投稿規定)や洗練されたテックカンファレンスのスライドに耐えうる厳格なルールセットが組み込まれています。
| デザイン要素 | デフォルト Matplotlib | orx-figures スタイル | もたらされる効果 |
|---|---|---|---|
| カラーパレット | 彩度の高すぎる原色サイクル(Blue/Orange) | 彩度を抑えたスレートネイビー+強調アクセント色 | 視覚疲労を抑え、重要系列への視線誘導が直感的に |
| 枠線(Spines) | 上・下・左・右の4辺を黒枠で囲む | 上・右スパインを完全除去、左・下を細線化 | 視覚ノイズを排除しデータインク比率を最大化 |
| 背景・グリッド | 完全白背景、無骨な格子線 | 不要な縦線を廃止、水平方向のみ薄い点線 | 数値の読み取りを補助しつつデータの邪魔をしない |
| 凡例(Legend) | 右上などの四角い囲み枠内に押し込め | 枠線を排除、または折れ線の終端に直接ラベル配置 | 視線の往復移動をなくし、直感的な認知を支援 |
| タイポグラフィ | 全要素が同一フォントで階層が曖昧 | Title: 16pt / Label: 12pt / Tick: 10pt の厳格設計 | プロジェクター投影や縮小印刷でも文字が潰れない |
| 解像度(DPI) | 標準 100 DPI(Web表示で線が滲む) | 高精細 300 DPI(ベクターPDFまたは高DPI PNG) | PDFや論文Overleafへの埋め込みで圧倒的鮮明さ |
alphaXiv「OpenResearch」と「orx-figures」のアーキテクチャ
OpenResearchとは何か?
OpenResearchは、alphaXivが主導するオープンソースの研究支援エージェント基盤です。研究者が日々の文献調査、arXivの論文精読、実験データの集計、さらには論文ドラフトの執筆に至る一連のパイプラインを、自律型CLIエージェント(orx コマンド)を通じて並列自動化することを目指しています。
このOpenResearchの拡張エコシステムとして提供されているのが「Skills」という仕組みです。エージェントに対して特定のタスク(図表作成、文献レビュー、LaTeX組版など)に特化した知見をモジュールとして外付けできるよう設計されています。
orx CLI の導入とスキル追加手順
orx はNode.js(npm)環境から数行のコマンドで手軽にセットアップが可能です。インストール後、公式スキルリポジトリから orx-figures をプロジェクトへ組み込みます。
# OpenResearch CLI をグローバルインストール
npm install -g @openresearch/cli
# インストールされたバージョンの確認
orx --version
# 図表生成特化スキル「orx-figures」をプロジェクトに追加
orx skill add alphaxiv/orx-figures
# 登録済みスキルのステータス確認
orx skill list
SKILL.md が果たす役割:デザイン規約のプロンプト注入
orx-figures スキルの中心にあるのは、構造化された仕様書である SKILL.md です。AIエージェントにプログラミングを頼む際、単に「綺麗なグラフを描いて」と自然言語でお願いしても、AIの解釈する「綺麗」の定義が曖昧なため満足な出力は得られません。
SKILL.md は、エージェントがコード生成を行うコンテキストに対して、以下のような厳格な制約とスタイル定義を強制的に注入します:
- 厳密な rcParams 設定: フォントファミリー(Helvetica, Arial, DejaVu Sans)、フォントサイズ階層、目盛り線の方向(内向き・外向き)、300 DPI の出力指定。
- カラーパレットの固定: 論文標準の Slate Navy(
#2C3E50)、Muted Gray(#95A5A6)、Accent Coral(#E74C3C)、Teal Green(#16A085)のHEXコード指定。 - データストーリーテリングの手法: 「すべての系列を等しく目立たせるな。検証対象の提案モデルのみを強調色と太線で描き、比較対象のベースライン群はグレーの細線で背景化せよ」という描画ロジックの定義。
- 直接ラベル付けの推奨: 凡例ボックスを排除し、各線の終端(最終X座標付近)に
plt.annotateやplt.textで直接名前を配置する実装パターンの提示。
この「エージェントに特化したスキル定義を外付けする」という発想は、以前解説したAIコーディングの実務活用とプロンプト最適化や、AIシステムの標準規格を目指すAnthropicのModel Hardware Standard (MHS)にも通底する重要なトレンドです。
【実践コード比較】素朴なMatplotlib vs 論文・プレゼン級スタイリング
では、実際にAIが出力するコードと、orx-figuresの思想を適用したコードでどれほどの違いが生まれるのか、実例コードで見てみましょう。AIモデルの学習ステップにおける正解率(Accuracy)の推移をプロットするシナリオです。
【Before】AIが素で出力しがちなデフォルトコード
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータ
iterations = np.array([0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50])
baseline_acc = np.array([7.2, 27.5, 41.8, 49.6, 53.8, 58.7, 62.4, 64.1, 67.5, 68.0, 69.8])
proposed_acc = np.array([11.8, 35.2, 56.4, 69.2, 77.1, 83.5, 86.8, 91.0, 92.4, 93.8, 94.6])
# 素朴なデフォルトプロット(野暮ったい例)
plt.figure()
plt.plot(iterations, baseline_acc, label="AI Baseline", color="blue", linewidth=2)
plt.plot(iterations, proposed_acc, label="Optimized Model", color="orange", linewidth=2)
plt.title("AI MODEL PERFORMANCE (DEFAULT)")
plt.xlabel("Data Points 1-50")
plt.ylabel("Value (arbitrary units)")
plt.legend()
plt.grid(True)
plt.show()
このコードを実行すると、冒頭の比較画像(左側)のように、四角い黒枠に囲まれ、原色の青とオレンジの線が走り、無機質な凡例ボックスがグラフ内に居座る図が出来上がります。
【After】orx-figures の設計思想を組み込んだ洗練コード
一方、以下は orx-figures のガイドラインに沿ってスタイル、配色、フォント階層、直接ラベルを組み込んだPythonコードです。コピペしてそのまま手元の環境で実行できます。
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータ
iterations = np.array([0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50])
baseline_acc = np.array([7.2, 27.5, 41.8, 49.6, 53.8, 58.7, 62.4, 64.1, 67.5, 68.0, 69.8])
proposed_acc = np.array([11.8, 35.2, 56.4, 69.2, 77.1, 83.5, 86.8, 91.0, 92.4, 93.8, 94.6])
# 1. 論文・プレゼン級の rcParams スタイル設定
plt.rcParams.update({
"font.family": "sans-serif",
"font.sans-serif": ["DejaVu Sans", "Arial", "Helvetica"],
"font.size": 11,
"axes.labelsize": 12,
"axes.titlesize": 14,
"xtick.labelsize": 10,
"ytick.labelsize": 10,
"figure.dpi": 300,
"axes.edgecolor": "#333333",
"axes.linewidth": 0.8
})
fig, ax = plt.subplots(figsize=(7, 4.5), constrained_layout=True)
# 2. 上・右スパインの除去(脱枠線化でデータインク比率最大化)
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
# 3. Y軸方向のみ控えめなグリッド線を配置
ax.yaxis.grid(True, linestyle="--", alpha=0.3, color="#888888")
ax.xaxis.grid(False)
# 4. 洗練された配色によるデータストーリーテリング
# ベースラインは落ち着いたスレートグレーで背景化
color_baseline = "#3A4A58"
# 主役の提案モデルは視認性の高いコーラルアクセントで強調
color_proposed = "#E06D53"
ax.plot(iterations, baseline_acc, color=color_baseline, linewidth=2.4, label="Baseline")
ax.plot(iterations, proposed_acc, color=color_proposed, linewidth=2.8, label="Optimized Model")
# 5. 凡例ボックスを排し、曲線の右端付近に直接注釈(Direct Labeling)
ax.text(iterations[-1] + 1.2, proposed_acc[-1] - 0.5, "Optimized Model",
color=color_proposed, fontsize=11, fontweight="bold", va="center")
ax.text(iterations[-1] + 1.2, baseline_acc[-1] - 0.5, "Baseline Model",
color=color_baseline, fontsize=11, va="center")
# 6. タイトルと軸ラベルの設定
ax.set_title("IMPROVED AI MODEL ACCURACY", pad=14, loc="left", fontweight="bold", color="#111111")
ax.set_xlabel("Training Iteration", labelpad=8)
ax.set_ylabel("Model Accuracy (%)", labelpad=8)
# 軸の表示範囲と余白調整
ax.set_xlim(-1, 62)
ax.set_ylim(0, 105)
# 高解像度保存(ベクターPDFまたは300dpi画像)
# plt.savefig("publication_ready_figure.pdf", bbox_inches="tight")
plt.show()
このコードを走らせるだけで、右辺と上辺の枠線が消え去り、水平グリッドが主張しすぎず、主役のデータが鮮やかに浮かび上がるグラフが出力されます。手作業でPhotoshopやIllustratorを開く必要は一切ありません。
現場エンジニアが直面する3大落とし穴とアンチパターン
AIにデータ可視化を任せる際、現場の実務で誰もが一度はハマる「典型的な罠」があります。事前に対策を知っておくことで無駄なデバッグ時間をゼロにできます。
① プロンプトで「綺麗にして」「モダンにして」と頼むだけの悪手
LLMに対して「オシャレな色にして」「プレゼン用に綺麗に作図して」と曖昧な形容詞で指示を出すのは典型的なアンチパターンです。AIは往々にしてサイバーパンク風のネオンカラーや過剰なグラデーション、暗黒のダークモード背景を生成し、学会や役員報告で使えない惨状を招きます。
「上・右の枠線を消す」「フォントサイズはタイトル14pt・軸12pt」「カラーパレットは #3A4A58 と #E06D53 を使用する」のように、具体的なパラメータとスタイルルールを構造化して渡すことが必須です。
② 日本語フォントの「豆腐(□□□)」文字化け問題
DockerコンテナやGoogle Colab、新規Python仮想環境でグラフを作成する際、軸ラベルやタイトルに日本語を含めると文字化け(豆腐化)が発生します。これはMatplotlibが標準で日本語フォントを内蔵していないためです。
手軽な解決策として pip install japanize-matplotlib を導入し、スクリプト冒頭で import japanize_matplotlib を呼ぶか、Linuxコンテナであれば fonts-noto-cjk パッケージをインストールして rcParams["font.sans-serif"] = ["Noto Sans CJK JP"] を指定するのが確実です。
③ 色覚多様性(CVD / バリアフリー)の無視
グラフ作成で最もやってはいけないのが「赤」と「緑」だけで2系列を比較することです。色覚特性(P型・D型)を持つ読者にとって、赤と緑はほぼ同じ明度の黄褐色に見えてしまい、どちらの曲線かを識別できなくなります。
論文や公式資料では、色覚多様性に配慮されたパレット(ColorBrewerのSet2や、Viridis、Cividis、または明度差を大きく設けたネイビー×オレンジ)を選択することが国際的なエチケットとなっています。
よくある質問(FAQ)
Q1: orx-figures は Claude Code や Cursor、ChatGPT でも流用できますか?
A. 完全に流用可能です。orx-figures の本質は、プログラミング言語を選ばない「デザインルールのプロンプト定義(Markdown)」です。OpenResearch CLIを使っていない環境でも、Cursorの .cursorrules や、Claude Code の .claude/rules、あるいは ChatGPTのカスタム指示(Custom Instructions)に上記のスタイルルールや rcParams の設定テンプレートを貼り付けておくだけで、普段のコーディングチャットでも同等水準の洗練されたグラフが出力されるようになります。
Q2: Seaborn や Plotly などの他の可視化ライブラリでも有効ですか?
A. 極めて有効です。
Seaborn は内部で Matplotlib を利用しているため、rcParams の変更や sns.despine(top=True, right=True) がそのまま適用されます。また Plotly や Altair を利用する場合でも、「枠線の排除」「薄い水平グリッド」「直接ラベル配置」「落ち着いたカラーテーマ(template="simple_white")」というデザイン思想は全く同一です。
Q3: 論文(LaTeX / Overleaf)に組み込む際の推奨フォーマットは?
A. ベクター形式(PDF)での出力が最も推奨されます。plt.savefig("figure.pdf", bbox_inches="tight") で出力したPDFファイルは、どれだけ拡大しても文字や直線が一切劣化せず、Overleaf上でもファイルサイズを軽量に保てます。スライド資料やWeb公開用であれば、dpi=300 を指定した高精細PNGで書き出すのがベストです。
まとめ:AIへの「デザイン指示」を構造化する時代へ
今回は、alphaXivが公開した図表特化スキル「orx-figures」の仕組みと、AIに論文・プレゼン級のグラフを一発出力させるための実践ノウハウを解説しました。
- AIの「グラフがダサい」問題の原因は、デフォルトMatplotlibの原色サイクル・四角い黒枠・窮屈な凡例にあった。
- orx-figures の核心は、
SKILL.mdを通じて「データインク比率の最大化」「洗練された配色」「直接ラベル付け」などのデザイン規約をAIに外付け注入する点にある。 - 実務での大きな武器として、rcParams やスパイン除去をテンプレート化することで、グラフの微調整という不毛な手作業を大幅に削減できる。
- CursorやClaude Codeでも即応用可能であり、汎用プロンプトではなく具体的なパラメータ設計をエージェントに渡すことが高品質なアウトプットへの近道である。
AIコーディングの進化は、「ただ動くコードを出力する」フェーズから、「人間やステークホルダーに真に伝わるプロフェッショナルな成果物を仕上げる」フェーズへと確実にシフトしています。グラフの微調整に何十分も浪費する日々を卒業し、構造化されたスキルとスタイル設定を活用して、エンジニア本来の分析や意思決定に集中していきましょう!
💡 あわせて読みたい:AIの評価・ベンチマークの最前線
💡 あわせて読みたい:LLMの推論性能限界に迫る

