用途
Scientific Visualization 是一个用于生成「可直接投稿」科学图表的元技能。它把数据可视化的常见科研需求——多子图布局、误差线、显著性标记、色盲友好配色、期刊尺寸与格式规范——打包成一套可复用的样式与脚本,让研究者用 matplotlib、seaborn、plotly 产出符合期刊要求的图形。
适用场景
资料列出以下典型使用时机:
- 为科学论文创建图表或可视化
- 准备投稿用图(Nature、Science、Cell、PLOS 等)
- 确保图表对色盲友好、具备可访问性
- 制作风格统一的多子图
- 以正确的分辨率与格式导出图形
- 遵循特定的投稿指南
- 把已有图形改进到符合发表标准
- 制作在彩色和灰度下都能解读的图形
主要能力
1. 分辨率与文件格式
- 栅格图像(照片、显微图):300–600 DPI
- 线稿(图表、曲线):600–1200 DPI 或矢量格式
- 首选矢量格式:PDF、EPS、SVG
- 栅格格式:TIFF、PNG(科学数据绝不使用 JPEG)
配套脚本 figure_export.py 提供 save_publication_figure 与 save_for_journal 用于按格式和 DPI 导出:
from figure_export import save_publication_figure
save_publication_figure(fig, 'myfigure', formats=['pdf', 'png'], dpi=300)
from figure_export import save_for_journal
save_for_journal(fig, 'figure1', journal='nature', figure_type='combination')
2. 配色与色盲可访问性
推荐 Okabe-Ito 调色板:
from color_palettes import OKABE_ITO_LIST, apply_palette
apply_palette('okabe_ito')
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. 字体与排版
- 无衬线字体:Arial、Helvetica、Calibri
- 最终印刷尺寸下的最小字号:轴标签 7–9 pt,刻度标签 6–8 pt,面板标签 8–12 pt(加粗)
- 标签使用句首大写:"Time (hours)" 而非 "TIME (HOURS)"
- 单位始终放在括号内
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. 图形尺寸(期刊)
- Nature:单栏 89 mm,双栏 183 mm
- Science:单栏 55 mm,双栏 175 mm
- Cell:单栏 85 mm,双栏 178 mm
可用 check_figure_size 检查尺寸合规性:
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 用小写)
- 各面板保持风格一致,尽量沿边缘对齐,面板间留足空白
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])
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')
使用方式
技能通过样式预设、配色脚本与导出脚本组合使用。基本流程示例:
import matplotlib.pyplot as plt
import numpy as np
from style_presets import apply_publication_style
apply_publication_style('default')
fig, ax = plt.subplots(figsize=(3.5, 2.5))
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.set_xlabel('Time (seconds)')
ax.set_ylabel('Amplitude (mV)')
ax.legend(frameon=False)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
from figure_export import save_publication_figure
save_publication_figure(fig, 'figure1', formats=['pdf', 'png'], dpi=300)
套用期刊样式:
plt.style.use('assets/nature.mplstyle')
# 或
from style_presets import configure_for_journal
configure_for_journal('nature', figure_width='single')
针对特定期刊的推荐流程:查阅 journal_requirements.md → 用 configure_for_journal 配置 → 创建图形 → 用 save_for_journal 导出。
统计严谨性
资料要求始终包含:误差线(SD、SEM 或 CI,并在图注中说明是哪种)、样本量 n、显著性标记(、、),以及在可能时展示个体数据点而非仅汇总统计。
ax.scatter(x_jittered, individual_points, alpha=0.4, s=8)
ax.errorbar(x, means, yerr=sems, fmt='o', capsize=3)
ax.text(1.5, max_y * 1.1, '***', ha='center', fontsize=8)
绘图库支持
- matplotlib:对出版细节控制最强,适合复杂多子图,配合提供的样式文件使用。
- seaborn:基于 matplotlib,面向数据集的高层统计绘图接口,自动估计与置信区间、内建分面、默认色盲友好调色板,适配 pandas DataFrame。建议先套用 matplotlib 出版样式再配置 seaborn。
- plotly:资料提及用于导出,但未给出用法细节。
常见出版物图形包括统计比较(箱线图叠加散点)、分布分析(小提琴图)、相关性矩阵(热力图)、带置信带的时间序列等,资料给出了对应代码示例。
限制
资料未提供该技能的安装方式、价格、收费模式、平台或运行环境要求,这些信息暂未提供。分类、版本、依赖管理等信息在给定资料中也暂未说明。