# Visualization Best Practices for ML/AI Papers

论文级可视化的最佳实践指南。

## 核心原则

1. **清晰性** - 信息传达清晰，无歧义
2. **准确性** - 数据表示准确，不误导
3. **可访问性** - 色盲友好，黑白打印可读
4. **专业性** - 符合学术出版标准

## 图表格式要求

### 矢量图 vs 位图

| 格式 | 类型 | 使用场景 | 质量 |
|------|------|----------|------|
| PDF/EPS | 矢量图 | 图表、曲线、示意图 | ✅ 推荐 |
| SVG | 矢量图 | 网页展示 | ✅ 可用 |
| PNG | 位图 | 照片、截图 | ⚠️ 需高分辨率（≥600 DPI） |
| JPG | 位图 | 照片 | ❌ 避免用于图表 |

**规则**: 所有图表使用矢量图格式（PDF/EPS），照片使用高分辨率位图（PNG ≥600 DPI）。

## 配色方案

### 色盲友好配色

**推荐配色方案**:

#### Okabe-Ito 配色（最常用）
- 橙色: #E69F00
- 天蓝: #56B4E9
- 绿色: #009E73
- 黄色: #F0E442
- 蓝色: #0072B2
- 红色: #D55E00
- 粉色: #CC79A7
- 黑色: #000000

#### Paul Tol 配色
- 适用于定性数据
- 提供多种配色方案（亮色、柔和、对比）

### 配色原则

1. **最多使用 5-7 种颜色** - 过多颜色难以区分
2. **避免红绿组合** - 红绿色盲无法区分
3. **测试黑白打印** - 确保灰度下可读
4. **使用不同线型** - 配合颜色使用（实线、虚线、点线）

## 图表类型选择

### 折线图 (Line Plot)

**使用场景**: 展示趋势、训练曲线、时间序列

**要点**:
- 使用误差带（阴影区域）表示标准差/标准误
- 线宽 1.5-2.0 pt
- 标记点大小适中（4-6 pt）
- 网格线透明度 0.3

**示例**: 训练损失曲线、准确率随 epoch 变化

### 柱状图 (Bar Plot)

**使用场景**: 性能对比、消融实验

**要点**:
- 使用误差条表示不确定性
- 柱子宽度一致
- 间距适当（柱宽的 20-30%）
- 加粗最佳结果的柱子

**示例**: 不同方法的准确率对比

### 箱线图 (Box Plot)

**使用场景**: 展示分布、识别异常值

**要点**:
- 显示中位数、四分位数、异常值
- 适合展示多次运行的结果
- 可与散点图叠加

**示例**: 多次运行的性能分布

### 散点图 (Scatter Plot)

**使用场景**: 展示相关性、聚类效果

**要点**:
- 点的大小和透明度适当
- 使用不同形状区分类别
- 添加趋势线（如需要）

**示例**: 预测值 vs 真实值、特征空间可视化

### 热力图 (Heatmap)

**使用场景**: 混淆矩阵、相关性矩阵、注意力权重

**要点**:
- 使用顺序配色（单色渐变）或发散配色（双色渐变）
- 添加数值标注（如空间允许）
- 色条（colorbar）清晰标注

**示例**: 混淆矩阵、注意力可视化

## 图表元素规范

### 坐标轴

**X 轴和 Y 轴**:
- 标签字体大小: 10-12 pt
- 刻度字体大小: 8-10 pt
- 标签清晰描述变量和单位
- 刻度间距合理

**坐标轴范围**:
- Y 轴通常从 0 开始（除非有特殊原因）
- 不要截断坐标轴夸大差异
- 使用科学计数法表示大数值

### 图例 (Legend)

**位置**: 不遮挡数据，通常放在右上角或外部

**内容**:
- 简洁描述每条曲线/柱子
- 字体大小 8-10 pt
- 使用与图中一致的颜色和线型

### 标题和标签

**图标题**: 通常不在图内添加标题，使用 caption 代替

**Caption**:
- 独立完整，不依赖正文
- 说明图表内容、实验设置、关键观察
- 字体大小 9-10 pt

**示例**: "图 1: 不同模型在测试集上的准确率对比。误差条表示 5 次运行的标准差。我们的方法（蓝色）在所有数据集上均优于基线方法。"

## 误差表示

### 误差条 (Error Bars)

**类型**:
- 标准差 (SD): 描述数据变异性
- 标准误 (SE): 描述均值不确定性
- 置信区间 (CI): 参数估计范围

**表示方法**:
- 柱状图: 垂直误差条
- 折线图: 误差带（阴影区域）

**必须说明**: 在 caption 中明确说明使用的是哪种误差

### 误差带 (Error Band)

**折线图的误差表示**:
- 使用半透明阴影区域（alpha=0.2-0.3）
- 颜色与主线一致
- 不要使用误差条（会使图表混乱）

## 尺寸和分辨率

### 图表尺寸

**单栏图** (single-column):
- 宽度: 3.5 inches (约 9 cm)
- 高度: 2-3 inches

**双栏图** (double-column):
- 宽度: 7 inches (约 18 cm)
- 高度: 3-5 inches

**纵横比**: 通常 4:3 或 16:9

### 分辨率

**矢量图**: 无需考虑分辨率

**位图**:
- 最低: 300 DPI
- 推荐: 600 DPI
- 高质量: 1200 DPI

## 常见错误

### 错误 1: 使用位图格式

❌ **错误**: 保存为 PNG/JPG
✅ **正确**: 保存为 PDF/EPS

### 错误 2: 非色盲友好配色

❌ **错误**: 红色和绿色组合
✅ **正确**: 使用 Okabe-Ito 配色

### 错误 3: 缺少误差表示

❌ **错误**: 只显示均值
✅ **正确**: 添加误差条/误差带

### 错误 4: 坐标轴截断

❌ **错误**: Y 轴从 80% 开始（夸大差异）
✅ **正确**: Y 轴从 0% 开始（或说明原因）

### 错误 5: 图表过于复杂

❌ **错误**: 一张图包含 10+ 条曲线
✅ **正确**: 拆分为多张图或使用子图

### 错误 6: 字体过小

❌ **错误**: 标签字体 6 pt
✅ **正确**: 标签字体 10-12 pt

## 检查清单

提交前检查：

- [ ] 使用矢量图格式（PDF/EPS）
- [ ] 配色色盲友好（Okabe-Ito 或 Paul Tol）
- [ ] 黑白打印可读（测试过）
- [ ] 包含误差条/误差带
- [ ] Caption 中说明误差类型
- [ ] 坐标轴标签清晰（包含单位）
- [ ] 图例不遮挡数据
- [ ] 字体大小适当（≥8 pt）
- [ ] 线宽适当（1.5-2.0 pt）
- [ ] Caption 独立完整

## 工具推荐

**Python**:
- matplotlib: 基础绘图
- seaborn: 统计可视化
- plotly: 交互式图表

**配色工具**:
- ColorBrewer: 配色方案选择
- Coblis: 色盲模拟器

**格式转换**:
- Inkscape: SVG 编辑和转换
- Adobe Illustrator: 专业图形编辑

## 参考资源

- [Ten Simple Rules for Better Figures](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1003833)
- [Okabe-Ito Color Palette](https://jfly.uni-koeln.de/color/)
- [Paul Tol's Notes on Colour](https://personal.sron.nl/~pault/)

## 总结

论文级可视化的关键：

1. **矢量图格式** - PDF/EPS
2. **色盲友好** - Okabe-Ito 配色
3. **误差表示** - 误差条/误差带
4. **清晰标注** - 坐标轴、图例、caption
5. **黑白可读** - 测试灰度打印

遵循这些原则可以创建清晰、准确、专业的论文图表。
