mcpField
S
scientific-visualization

scientific-visualization

github.com/jaechang-hitsデータ・データベース38482 回インストール1 週間前に更新
リポジトリ

scientific-visualization について

研究者向けの科学可視化ガイドで、グラフ選択、色、レイアウト、アクセシビリティ、投稿規定に沿った形式を扱います。データを正確に示し、データ型や分析目的に合う図表を選ぶ方法を説明します。

主な機能

  1. 01データ構造に応じたグラフ選択
  2. 02色覚に配慮したパレット
  3. 03複数パネル図の配置とラベル
  4. 04投稿先に応じたサイズと出力
  5. 05統計注釈と可読性の確認

活用シーン

  1. 01分布や時系列に合う図表の選択
  2. 02投稿用レイアウトに合わせた図の作成
  3. 03グレースケールでの配色確認
  4. 04複数パネル図と統計注釈の整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jaechang-hits/sciagent-skills --skill scientific-visualization

インストール後、Claude Code で/scientific-visualizationを入力して読み込まれたか確認します。

詳細

scientific-visualization

概要

効果的な科学的可視化は、データを明確かつ誠実に、誰もが理解しやすい形で伝えます。不適切なグラフの選択、誤解を招く軸、アクセシビリティに配慮されていないカラーパレットは、知見を見えにくくしたり、偏りを生じさせたりすることがあります。このガイドでは、データ構造に適したグラフの種類の選択から、色彩理論、アクセシビリティ、学術誌への投稿時の書式要件まで、科学図版を準備する一連のワークフローを解説します。

重要な概念

グラフの種類とデータ型の対応

各グラフの種類は、特定のデータ構造に合わせて最適化されています。対応が合っていない場合(例:連続分布に円グラフを使う、時系列に棒グラフを使う)、データの構造が隠れ、認識が歪められます。

データ型推奨するグラフ避けるもの
連続分布(1 グループ)ヒストグラム、バイオリンプロット、リッジプロット平均値のみを示す棒グラフ
連続分布(2~5 グループ)バイオリンプロットと箱ひげ図の重ね合わせ、ビースウォームプロットグループ化した棒グラフ
2 つの連続変数、相関散布図、大規模な N ではヘックスビンプロット時間的な順序がない折れ線グラフ
カテゴリ別の件数/割合棒グラフ(長いラベルには横棒グラフ)円グラフ(カテゴリが 4 超)
時間経過に伴う変化(連続)折れ線グラフ棒グラフ
時間経過に伴う変化(疎なイベント)階段グラフ、イベントラスタープロット点を線で結んだ散布図
全体に占める各部分の割合(部分が 5 以下)積み上げ棒グラフ、ワッフルチャート3D 円グラフ
高次元(変数が 5 超)ヒートマップ(クラスタリングあり)、平行座標プロット3D 散布図
空間データ地図、空間ヒートマップバブルチャート
生存時間/イベント発生までの時間Kaplan-Meier 曲線生存時間の中央値を示す棒グラフ
科学における色彩理論

色は情報を符号化します。色を不適切に使うと、アーティファクトが生じ、色覚異常(CVD)のある読者が情報を読み取れなくなることがあります(男性の約 8%)。

逐次カラーパレットは、順序のある数値データを低から高へと符号化します(例:発現量、濃度)。知覚的に均一なパレットを使用してください:viridis、magma、cividis。これらはグレースケールでも印刷できます。

発散カラーパレットは、意味のある中間点を持つデータを符号化します(例:0 を中心とした倍率変化、-1 から +1 までの相関)。RdBu、coolwarm、または vlag を使用してください。必ず中間点が白または中立色に対応するようにします。

質的カラーパレットは、順序のないカテゴリを符号化します。色覚異常に配慮した岡部伊藤パレット、tab10(matplotlib のデフォルト)、または ColorBrewer の質的パレットを使用してください。区別可能な色は 8 色以下に抑え、それ以上は形状やパターンも併用して符号化します。

色の使用で避けること:

  • レインボー/jet カラーマップ:知覚的に均一ではなく、実際にはない境界を生み出します
  • 赤と緑による符号化:2 型色覚では区別できません(男性の約 6%)
  • 背景や広い領域に彩度の高い色を使うこと
図版の構成とレイアウト

科学図版は通常、複数のパネルで構成されます。パネルの配置やラベルの付け方は、読者が情報をどのように読み取るかに影響します。

  • パネルラベル:左上に太字の大文字(A、B、C)を付けます。図中では 8~12 pt を使用し、キャプションで参照する文字はそれより大きくします。
  • 配置:パネルの端をグリッドに沿って揃えます。パネルが揃っていないと、細部への配慮が不足している印象を与えます。
  • 余白:十分なマージンを設けます。パネルが詰まっていると読みやすさが損なわれます。
  • 図版サイズ:掲載先の段幅に合わせて設計します。Nature 系列の学術誌では、1 段(約 85 mm/3.35 in)、1.5 段(約 114 mm/4.5 in)、または 2 段(約 170 mm/6.7 in)です。
  • フォント:出版時の解像度において、最終図版で 6~8 pt 以上のサンセリフ体(Arial、Helvetica)を使用します。
ジャーナルの図表作成要件

主要なジャーナルは、投稿時の図表に関する厳密な要件を定めています。これに違反すると、デスクリジェクトによる遅延が発生します。

ジャーナル/スタイル最大幅解像度カラーモードフォントファイル形式
Nature 系列89 mm(1 段組)、183 mm(2 段組)300 dpi(写真)、600 dpi(線画)RGB または CMYKArial 5~7 ptPDF、TIFF、EPS
Cell/iScience85 mm(1 段組)、170 mm(2 段組)300 dpi(ラスター)、600 dpi(ハーフトーン)RGBHelvetica 6~8 ptPDF、EPS、TIFF
ACS ジャーナル3.25 in(1 段組)、7 in(2 段組)600 dpi(カラー)、1200 dpi(白黒線画)RGB(画面表示)、CMYK(印刷)Arial/Helvetica 4.5~7 ptTIFF、EPS、PDF
PLOS ONE厳密な幅の指定なし300 dpi(ラスター)、600~1200 dpi(線画)RGB任意TIFF、EPS、PDF

判断フレームワーク

分析の目的に適した可視化を選ぶには、次のツリーを使ってください。

What is the primary message of this figure?
|
+-- Show a distribution or spread of values
|   +-- One group         --> Histogram or violin plot
|   +-- 2-5 groups        --> Violin + jitter (show all points if N < 100)
|   +-- Many groups       --> Ridge plot (joy plot)
|
+-- Compare quantities between categories
|   +-- Few categories (2-5)    --> Bar chart with error bars + individual points
|   +-- Many categories (>8)    --> Lollipop chart or dot plot (horizontal)
|   +-- Paired measurements     --> Slopegraph or paired dot plot
|
+-- Show a relationship between two continuous variables
|   +-- N < 1000                --> Scatter plot
|   +-- N > 1000                --> Hexbin or 2D density plot
|   +-- Time ordered            --> Line chart
|
+-- Show composition or part-to-whole
|   +-- 2-4 parts               --> Stacked bar or waffle chart
|   +-- Over time               --> Stacked area chart
|   +-- Avoid pie chart unless <= 3 parts and proportions are obvious
|
+-- Show high-dimensional data
|   +-- Genes x samples         --> Clustered heatmap (seaborn.clustermap)
|   +-- Embeddings (UMAP, PCA)  --> Scatter colored by metadata
|   +-- Feature importance      --> Horizontal bar chart (sorted)
|
+-- Show spatial or geographic data
|   +-- Microscopy              --> Image overlay with colorbar
|   +-- Geographic              --> Choropleth map
分析の目的グラフの種類ライブラリ主な考慮事項
グループ間の遺伝子発現バイオリンプロット+ジッターseaborn、plotnineN < 50 の場合はすべての点を表示します。棒グラフ+SEM のみは避けてください
差次的発現ボルケーノプロットmatplotlibx 軸に Log2FC、y 軸に -log10(p) を配置します
クラスタリング結果UMAP 散布図scanpy、matplotlibアノテーション変数ごとに 1 つのプロットを作成します
相関行列クラスタリング付きヒートマップseaborn.clustermap0 を中心とした発散型パレットを使用します
タンパク質構造リボンダイアグラムPyMOL、ChimeraXここでは扱いません。専用の分子グラフィックスツールを使用してください
生存分析Kaplan-Meier 曲線lifelines信頼帯とリスク集合表を含めます
時系列信頼区間付き折れ線グラフmatplotlib不確実性を表示し、個々の点ではなくグループの平均値を結びます

ベストプラクティス

  1. 要約だけでなく、データを見せます:N < 100 の場合は、ジッターまたはビーズウォームを使って、バイオリンプロットや箱ひげ図に個々のデータ点を重ねます。平均値 ± SEM のみを示す棒グラフでは、分布の形状、外れ値、二峰性が隠れてしまいます。

  2. デフォルトで CVD に配慮したカラーパレットを選びます:連続データには Okabe-Ito または viridis/cividis を使用します。投稿前に CVD シミュレーター(例:Coblis)で図を確認してください。

  3. 最初から最終的な掲載サイズでデザインします:図のキャンバスを投稿先ジャーナルの正確な段幅(例:Nature の 1 段組では 89 mm)に設定します。後から拡大縮小すると、フォントが小さすぎたり大きすぎたりし、縦横比も変わります。

  4. 単位を付けて軸にラベルを付け、内容が分かるタイトルを使います:各軸には、単位を括弧内に含むラベルを付けてください(例:「Expression level (log2 CPM)」)。凡例に記載のない分かりにくい略語は避けます。

  5. 線画とテキストにはベクター形式を使用します:テキストや線を含む図は PDF または SVG で保存します。TIFF を指定するジャーナルに投稿する場合にのみ、ラスター化してください。ベクター図はピクセル化せずに拡大縮小でき、編集可能な状態を保てます。

  6. 統計注釈を実施した検定に合わせます:有意差をアスタリスク(*)で示す場合は、キャプションに使用した検定、正確な p 値、サンプルサイズを記載してください。「n.s.」の場合も p 値を記載します。

  7. 2 軸グラフは避けます:1 つのプロットに異なる y 軸を 2 つ設けると、ほとんどの場合、誤解を招きます。見かけ上の関係が尺度の選択によって変わるためです。代わりに、パネルを 2 つに分けてください。

よくある落とし穴

  1. 連続分布に棒グラフを使う(ダイナマイトプロット)

    • 問題点: 平均値 ± SEM の棒グラフでは、データが正規分布か、多峰性か、外れ値があるかが分かりません。同じ棒グラフでも、データセットの分布はまったく異なる場合があります。
    • 回避方法: バイオリンプロット、ジッターを加えた箱ひげ図、またはビースウォームプロットを使います。N < 50 の場合は、すべてのデータ点を表示します。
  2. 差を誇張する、途中で切れた、または分断された y 軸

    • 問題点: y 軸をゼロ以外の値から始めると、小さな差が大きく見え、効果量について読者に誤解を与えます。
    • 回避方法: 比率データやカウントデータでは、y 軸をゼロから始めます。拡大表示が本当に必要な場合は、挿入図を使うか、軸が切れていることを明記した別のパネルを用意します。
  3. ヒートマップにレインボー/jet カラーマップを使う

    • 問題点: Jet は知覚的に均一ではなく、偽の等高線を生み出し、CVD やグレースケール印刷では適切に表示されません。
    • 回避方法: 逐次データには viridis、magma、または inferno を、発散データには RdBu または coolwarm を使います。これらは seaborn >= 0.12 のデフォルトです。
  4. ジッターや透明度なしでデータ点を重ねる

    • 問題点: 点が重なり(オーバープロット)、密集した領域がまばらに見え、実際のデータ密度が分からなくなります。
    • 回避方法: ジッターを加える(seaborn.stripplot(jitter=True))、透明度を設定する(alpha=0.3)、または N が大きい場合はヘックスビンプロット/2D 密度プロットに切り替えます。
  5. 効果量やサンプルサイズなしで p 値を注記する

    • 問題点: N = 10,000 で統計的に有意(p < 0.05)な結果でも、科学的には取るに足らない場合があります。アスタリスクだけでは情報が不十分です。
    • 回避方法: 正確な p 値、効果量(Cohen's d、オッズ比)、サンプルサイズを、図のキャプションまたはプロット上に直接記載します。
  6. 図の文字が出版時のサイズで小さすぎる

    • 問題点: 画面サイズで作成してからジャーナルの段幅に縮小すると、文字が 3–4 pt になり、最低限の可読性基準を満たせなくなります。
    • 回避方法: 最初から最終的な印刷サイズで作成します。最終的な寸法で軸ラベルが ≥ 6 pt であることを確認します。
  7. 複数パネルの図でパネルごとのスタイルが統一されていない

    • 問題点: パネル間でフォント、線幅、または配色が異なると、図がプロらしく見えず、比較もしにくくなります。
    • 回避方法: 図のスクリプトの冒頭で共通の matplotlib.rcParams スタイル辞書を定義し、すべてのパネルに適用します。

ワークフロー

  1. まず伝えたいことを決める

    • 読者にこの図から何を読み取ってほしいかを説明する一文を書きます。
    • 上記の判断フレームワークを使い、そのメッセージを最も直接的に伝えるグラフの種類を選びます。
  2. データを準備する

    • プロットする前に、データを集計、整形、検証します。
    • 何も言わずに除外するのではなく、調査すべき外れ値がないか確認します。
  3. 画面解像度で試作する

    • お好みのライブラリ(matplotlib、seaborn、ggplot2、plotnine)で図のドラフトを作成します。
    • この段階では、スタイルは気にせず、データとグラフの種類を適切にすることに集中します。
  4. ジャーナル固有のスタイルを適用する

    • キャンバスサイズを投稿先ジャーナルの段幅に設定します。
    • フォントファミリーと最小サイズを設定します。
    • CVD に配慮した配色を選びます。
    • 線幅を統一します(軸と目盛りは 0.5–1.0 pt、データ線は 1.0–2.0 pt)。
  5. 注釈とラベルを追加する

    • パネルラベル(A、B、C)は太字にします。
    • 単位を含む軸ラベルを付けます。
    • 検定名と正確な p 値を含む統計的注釈を付けます。
    • 説明的な項目名を含む凡例を付けます。
  6. 適切な解像度でエクスポートする

    • ベクター形式: 線画やテキストには PDF または SVG を使います。
    • ラスター形式: TIFF を 300 dpi(ハーフトーン/写真)または 600 dpi(線画)で保存します。
    • matplotlib では plt.savefig("fig1.pdf", bbox_inches="tight") を使います。
  7. アクセシビリティを確認する

    • オンラインツールまたは GIMP の色覚異常フィルターを使って CVD をシミュレーションします。
    • グレースケールで印刷し、パネルを見分けられることを確認します。

プロトコルのガイドライン

  1. matplotlib/seaborn の場合:すべての図のスクリプトの冒頭で rcParams を設定し、ジャーナルの寸法を適用するために fig.set_size_inches() を使用し、最低 dpi=300 でエクスポートします。
  2. R/ggplot2 の場合:theme_classic() またはカスタムテーマを使用し、ggsave(width=..., units="mm", dpi=300) を設定します。
  3. 複数パネルの配置の場合:パネルグリッドを揃えるために、matplotlib.gridspec、patchworklib(Python)、または cowplot/patchwork(R)を使用します。
  4. インタラクティブな図の場合:HTML 出力には Plotly または Bokeh を、ウェブへの埋め込みには Vega-Lite を使用します。出版用には必ず静的な代替版も用意してください。
  5. ポスター発表の場合:すべてのフォントを 1.5~2 倍に拡大し、大きめのマーカー(ポイントサイズ 8~12)と太めの線(2~3 pt)を使用します。コントラストの高い暗い背景のパレットを優先してください。

参考資料

関連スキル

  • matplotlib-figures — matplotlib と seaborn を使った、出版品質の図の Python 実装
  • data-visualization — 汎用的な Python のプロットレシピ
  • biostatistics — 図の注釈に添える統計検定の選択

コメント