alterlab-scientific-viz について
論文や学術誌への投稿に使う科学図表を作成するスキルです。matplotlib、seaborn、plotly向けに、学術誌別のスタイル、配慮された配色、複数パネル配置、サイズ確認、各種形式への書き出しを扱います。
主な機能
- 01学術誌別の図表スタイル適用
- 02複数パネル図の作成
- 03色覚に配慮した配色
- 04図のサイズと可読性の確認
- 05PDF、EPS、TIFFなどへの出力
活用シーン
- 01学術誌投稿用の図表準備
- 02論文内の図表スタイル統一
- 03グレースケール対応図の作成
- 04投稿規定に沿った確認と書き出し
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-scientific-vizインストール後、Claude Code で/alterlab-scientific-vizを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/color_palettes.pynature.mplstylepresentation.mplstylepublication.mplstyleevals/evals.jsonreferences/color_palettes.mdcommon_tasks.mdjournal_requirements.mdmatplotlib_examples.mdpublication_guidelines.mdseaborn_in_publications.mdscripts/figure_export.pystyle_presets.py詳細
科学可視化
概要
科学可視化では、データを出版向けの明瞭で正確な図に変換します。複数パネルのレイアウト、エラーバー、有意差マーカー、色覚多様性に配慮した配色を使って、ジャーナル投稿に適したプロットを作成します。matplotlib、seaborn、plotlyを使い、論文原稿向けにPDF/EPS/TIFF形式でエクスポートします。
このスキルを使用する場面
次の場合にこのスキルを使用してください:
- 科学論文の原稿に掲載するプロットや可視化を作成する
- ジャーナル投稿用の図を準備する(Nature、Science、Cell、PLOSなど)
- 図が色覚多様性に配慮し、アクセシブルであることを確認する
- 一貫したスタイルで複数パネルの図を作成する
- 図を適切な解像度と形式でエクスポートする
- 特定の出版ガイドラインに従う
- 既存の図を出版基準に適合するよう改善する
- カラーとグレースケールの両方で問題なく表示できる図を作成する
対象外
| シナリオ | 代わりに使用 |
|---|---|
| カスタムプロットを一から構築する、または個々のアーティストやrcParamsを調整する | alterlab-matplotlib |
| データの傾向をざっと確認するための簡易的な探索用統計プロット(ペアプロット、分布など) | alterlab-seaborn |
| ホバーやズーム機能のあるインタラクティブなチャート、またはウェブダッシュボード | alterlab-plotly |
| 完成した図の校正(データの忠実性、ラベルの重なり、300-dpiでのエクスポート確認) | alterlab-figure-qa |
| 模式図、フローチャート、または経路図 | alterlab-scientific-schematics |
クイックスタートガイド
出版品質の基本的な図
import matplotlib.pyplot as plt
import numpy as np
# Apply publication style (from scripts/style_presets.py)
from style_presets import apply_publication_style
apply_publication_style('default')
# Create figure with appropriate size (single column = 3.5 inches)
fig, ax = plt.subplots(figsize=(3.5, 2.5))
# Plot data
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
# Proper labeling with units
ax.set_xlabel('Time (seconds)')
ax.set_ylabel('Amplitude (mV)')
ax.legend(frameon=False)
# Remove unnecessary spines
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# Save in publication formats (from scripts/figure_export.py)
from figure_export import save_publication_figure
save_publication_figure(fig, 'figure1', formats=['pdf', 'png'], dpi=300)
設定済みのスタイルを使用する
assets/ にあるmatplotlibのスタイルファイルを使って、ジャーナル固有のスタイルを適用します:
import matplotlib.pyplot as plt
# Option 1: Use style file directly
plt.style.use('assets/nature.mplstyle')
# Option 2: Use style_presets.py helper
from style_presets import configure_for_journal
configure_for_journal('nature', figure_width='single')
# Now create figures - they'll automatically match Nature specifications
fig, ax = plt.subplots()
# ... your plotting code ...
Seabornでのクイックスタート
統計プロットには、出版向けのスタイル設定を適用したseabornを使用します:
import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style
# Apply publication style
apply_publication_style('default')
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind')
# Create statistical comparison figure
fig, ax = plt.subplots(figsize=(3.5, 3))
# seaborn >=0.13: pass hue + legend=False to color by category
# (a bare palette= without hue= is deprecated, slated for removal in v0.14)
sns.boxplot(data=df, x='treatment', y='response',
order=['Control', 'Low', 'High'],
hue='treatment', palette='Set2', legend=False, ax=ax)
sns.stripplot(data=df, x='treatment', y='response',
order=['Control', 'Low', 'High'],
color='black', alpha=0.3, size=3, ax=ax)
ax.set_ylabel('Response (μM)')
sns.despine()
# Save figure
from figure_export import save_publication_figure
save_publication_figure(fig, 'treatment_comparison', formats=['pdf', 'png'], dpi=300)
基本原則とベストプラクティス
1. 解像度とファイル形式
重要な要件(詳細は references/publication_guidelines.md を参照):
- ラスター画像(写真、顕微鏡画像):300~600 DPI
- 線画(グラフ、プロット):600~1200 DPIまたはベクター形式
- ベクター形式(推奨):PDF、EPS、SVG
- ラスター形式:TIFF、PNG(科学データにはJPEGを使用しないでください)
実装:
# Use the figure_export.py script for correct settings
from figure_export import save_publication_figure
# Saves in multiple formats with proper DPI
save_publication_figure(fig, 'myfigure', formats=['pdf', 'png'], dpi=300)
# Or save for specific journal requirements
from figure_export import save_for_journal
save_for_journal(fig, 'figure1', journal='nature', figure_type='combination')
2. 色の選択 — 色覚多様性への配慮
色覚多様性に配慮した配色を必ず使用してください(詳細は references/color_palettes.md を参照):
推奨:岡部伊藤の配色(あらゆるタイプの色覚特性を持つ人に識別可能):
# Option 1: Use assets/color_palettes.py
from color_palettes import OKABE_ITO_LIST, apply_palette
apply_palette('okabe_ito')
# Option 2: Manual specification
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
'#0072B2', '#D55E00', '#CC79A7', '#000000']
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=okabe_ito)
ヒートマップ/連続データの場合:
- 知覚的に均一なカラーマップを使用します:
viridis、plasma、cividis - 赤と緑の発散型カラーマップは避けます(代わりに
PuOr、RdBu、BrBGを使用します) jetまたはrainbowカラーマップは使用しないでください
図をグレースケールでも必ず確認し、解釈できることを確かめてください。
3. タイポグラフィとテキスト
フォントのガイドライン(詳細は references/publication_guidelines.md を参照):
- サンセリフフォント:Arial、Helvetica、Calibri
- 最終的な印刷サイズでの最小文字サイズ:
- 軸ラベル:7~9 pt
- 目盛りラベル:6~8 pt
- パネルラベル:8~12 pt(太字)
- ラベルは文頭のみ大文字にします:「Time (hours)」ではなく「TIME (HOURS)」
- 単位は必ず括弧内に記載します
実装:
# Set fonts globally
import matplotlib as mpl
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = ['Arial', 'Helvetica']
mpl.rcParams['font.size'] = 8
mpl.rcParams['axes.labelsize'] = 9
mpl.rcParams['xtick.labelsize'] = 7
mpl.rcParams['ytick.labelsize'] = 7
4. 図の寸法
ジャーナルごとの幅(詳細は references/journal_requirements.md を参照):
- Nature:1段組 89 mm、2段組 183 mm
- Science:1段組 55 mm、2段組 175 mm
- Cell:1段組 85 mm、2段組 178 mm
図のサイズが要件に適合しているか確認します:
from figure_export import check_figure_size
fig = plt.figure(figsize=(3.5, 3)) # 89 mm for Nature
check_figure_size(fig, journal='nature')
5. 複数パネルの図
ベストプラクティス:
- パネルには太字の文字を付けます:A、B、C(大半のジャーナルでは大文字、Natureでは小文字)
- すべてのパネルで一貫したスタイルを保ちます
- 可能な場合はパネルの端を揃えます
- パネル間に十分な余白を設けます
実装例(完全なコードは references/matplotlib_examples.md を参照):
from string import ascii_uppercase
fig = plt.figure(figsize=(7, 4))
gs = fig.add_gridspec(2, 2, hspace=0.4, wspace=0.4)
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
# ... create other panels ...
# Add panel labels
for i, ax in enumerate([ax1, ax2, ...]):
ax.text(-0.15, 1.05, ascii_uppercase[i], transform=ax.transAxes,
fontsize=10, fontweight='bold', va='top')
一般的なタスク
手順を追って実行するレシピです。完全なコードは references/common_tasks.md と references/matplotlib_examples.md にあります。
- 出版品質の折れ線グラフ — スタイル、ジャーナル向けのサイズ、色覚多様性に配慮した色、エラーバー、単位、枠線の削除、ベクター形式でのエクスポート。
- 複数パネルの図 —
GridSpecによるレイアウト、一貫したスタイル、太字のパネルラベル。 - 適切なカラーマップを使ったヒートマップ — 知覚的に均一なカラーマップ(
viridis)または色覚多様性に配慮した発散型カラーマップ(RdBu_r)、ラベル付きカラーバー、グレースケールでのテスト。 - 特定のジャーナル向けの準備 —
configure_for_journal(...)の後にsave_for_journal(...)を実行します。 - 既存の図の修正 — 出版用チェックリスト(解像度、形式、色、フォント、ラベル、サイズ、グレースケール、不要な装飾)を実行します。
- 色覚多様性に配慮した図 — 承認済みのパレット+冗長な符号化(線種、マーカー)+シミュレーターでのテスト。
統計的な厳密性(常に必要): エラーバー(SD/SEM/CIのどれを示すかをキャプションに明記)、サンプルサイズn、有意差マーカー、可能であれば個々のデータ点。
プロットライブラリ — 使い分け
- Matplotlib — 最も自由度が高く、複雑な複数パネルの図に最適です。例:
references/matplotlib_examples.md。 - Seaborn — 信頼区間とファセットを自動で処理する、高水準の統計グラフィックスです。詳しいガイド:
references/seaborn_in_publications.md。 - Plotly — インタラクティブな探索向けです。
fig.write_image('figure.png', scale=3)で静的な画像としてエクスポートできます(約300 DPI)。kaleido >= 1 と Chrome が必要です(plotly_get_chromeを一度実行してください)。matplotlib_examples.mdの例8を参照してください。
リソース
References ディレクトリ
詳細情報が必要な場合は、以下を読み込んでください。
-
publication_guidelines.md:出版に関する包括的なベストプラクティス- 解像度とファイル形式の要件
- タイポグラフィのガイドライン
- レイアウトと構成のルール
- 統計的な厳密性に関する要件
- 出版用の完全なチェックリスト
-
color_palettes.md:色の使い方ガイド- RGB値付きの色覚多様性に配慮したパレットの仕様
- シーケンシャル型および発散型カラーマップの推奨事項
- アクセシビリティのテスト手順
- 分野別パレット(ゲノミクス、顕微鏡画像)
-
journal_requirements.md:ジャーナルごとの仕様- 出版社別の技術要件
- ファイル形式とDPIの仕様
- 図の寸法に関する要件
- クイックリファレンステーブル
-
matplotlib_examples.md:実用的なコード例- 動作する完全な例10件
- 折れ線グラフ、棒グラフ、ヒートマップ、複数パネルの図
- ジャーナル向けの図の例
- 各ライブラリ(matplotlib、seaborn、plotly)のヒント
Scripts ディレクトリ
自動化には、以下のヘルパースクリプトを使用してください。
-
figure_export.py:エクスポート用ユーティリティsave_publication_figure():適切なDPIで複数の形式に保存しますsave_for_journal():ジャーナル固有の要件を自動的に適用しますcheck_figure_size():寸法がジャーナルの仕様を満たしているか確認します- 例を実行するには、
python scripts/figure_export.pyを直接実行してください
-
style_presets.py:設定済みのスタイルapply_publication_style():プリセットスタイル(default、nature、science、cell)を適用しますset_color_palette():パレットをすばやく切り替えますconfigure_for_journal():ジャーナル向けの設定を1つのコマンドで行います- 例を見るには、
python scripts/style_presets.pyを直接実行してください
Assets ディレクトリ
図には以下のファイルを使用してください。
-
color_palettes.py:インポート可能な色定義- 推奨パレットをすべてPython定数として収録
apply_palette()ヘルパー関数- ノートブック/スクリプトに直接インポートできます
-
Matplotlib スタイルファイル:
plt.style.use()で使用しますpublication.mplstyle:一般的な出版品質向けnature.mplstyle:Nature誌の仕様presentation.mplstyle:ポスター/スライド向けの大きなフォント
ワークフローの概要
論文掲載用の図を作成する際の推奨ワークフロー:
- 計画:投稿先のジャーナル、図の種類、内容を決定します
- 設定:ジャーナルに適したスタイルを適用します
from style_presets import configure_for_journal configure_for_journal('nature', 'single') - 作成:適切なラベル、色、統計情報を用いて図を作成します
- 確認:サイズ、フォント、色、アクセシビリティを確認します
from figure_export import check_figure_size check_figure_size(fig, journal='nature') - エクスポート:指定された形式で保存します
from figure_export import save_for_journal save_for_journal(fig, 'figure1', 'nature', 'combination') - レビュー:原稿に組み込んだ状態で最終サイズの図を確認します
避けるべきよくある落とし穴
- フォントが小さすぎる:最終サイズで印刷すると文字が読めません
- JPEG形式:グラフやプロットには決してJPEGを使用しないでください(アーティファクトが発生します)
- 赤と緑の色:男性の約8%は区別できません
- 解像度が低い:論文掲載時に図が粗くなります
- 単位の記載漏れ:軸には必ず単位を付記してください
- 3D効果:認識を歪めるため、完全に避けてください
- 不要な装飾:不要なグリッド線や装飾を取り除いてください
- 切り詰められた軸:科学的に正当化できる場合を除き、棒グラフはゼロから始めてください
- スタイルの不統一:同じ原稿内の図で異なるフォントや色を使わないでください
- エラーバーがない:不確実性は必ず示してください
最終チェックリスト
図を投稿する前に、以下を確認してください:
- 解像度がジャーナルの要件を満たしている(300+ DPI)
- ファイル形式が適切である(プロットにはベクター形式、画像にはTIFF)
- 図のサイズがジャーナルの仕様に合っている
- 最終サイズで文字がすべて読める(≥6 pt)
- 色が色覚多様性に配慮している
- グレースケールでも図が判読できる
- すべての軸に単位が記載されている
- エラーバーがあり、キャプションにその定義が記載されている
- パネルラベルがあり、表記が統一されている
- 不要な装飾や3D効果がない
- すべての図でフォントが統一されている
- 統計的有意性が明確に示されている
- 凡例が明確で、必要な情報がそろっている
このスキルを使って、すべての読者が利用しやすい状態を保ちながら、科学図が最高水準の論文掲載基準を満たすようにしてください。