[ SKILL_DOCUMENTATION ]
# Matplotlib 样式指南
用于 Matplotlib 可视化样式设计与自定义的综合指南。
## 色图 (Colormaps)
### 色图类别
**1. 感知均匀序列 (Perceptually Uniform Sequential)**
最适合从低值到高值的有序数据。
- `viridis` (默认,对色盲友好)
- `plasma`
- `inferno`
- `magma`
- `cividis` (针对色盲用户优化)
**用法:**
python
im = ax.imshow(data, cmap='viridis')
scatter = ax.scatter(x, y, c=values, cmap='plasma')
**2. 序列 (Sequential)**
用于有序数据的传统色图。
- `Blues`, `Greens`, `Reds`, `Oranges`, `Purples`
- `YlOrBr`, `YlOrRd`, `OrRd`, `PuRd`
- `BuPu`, `GnBu`, `PuBu`, `YlGnBu`
**3. 发散 (Diverging)**
最适合具有明确中心点(如零、平均值)的数据。
- `coolwarm` (蓝到红)
- `RdBu` (红-蓝)
- `RdYlBu` (红-黄-蓝)
- `RdYlGn` (红-黄-绿)
- `PiYG`, `PRGn`, `BrBG`, `PuOr`, `RdGy`
**用法:**
python
# 将色图中心设为零
im = ax.imshow(data, cmap='coolwarm', vmin=-1, vmax=1)
**4. 定性 (Qualitative)**
最适合没有内在顺序的分类/名义数据。
- `tab10` (10 种不同颜色)
- `tab20` (20 种不同颜色)
- `Set1`, `Set2`, `Set3`
- `Pastel1`, `Pastel2`
- `Dark2`, `Accent`, `Paired`
**用法:**
python
colors = plt.cm.tab10(np.linspace(0, 1, n_categories))
for i, category in enumerate(categories):
ax.plot(x, y[i], color=colors[i], label=category)
**5. 循环 (Cyclic)**
最适合循环数据(如相位、角度)。
- `twilight`
- `twilight_shifted`
- `hsv`
### 色图最佳实践
1. **避免使用 `jet` 色图** - 感知不均匀,具有误导性
2. **使用感知均匀色图** - `viridis`, `plasma`, `cividis`
3. **考虑色盲用户** - 使用 `viridis`, `cividis`,或使用色盲模拟器进行测试
4. **匹配数据类型的色图**:
- 序列:递增/递减数据
- 发散:具有明确中心的数据
- 定性:分类数据
5. **反转色图** - 添加 `_r` 后缀:`viridis_r`, `coolwarm_r`
### 创建自定义色图
python
from matplotlib.colors import LinearSegmentedColormap
# 从颜色列表创建
colors = ['blue', 'white', 'red']
n_bins = 100
cmap = LinearSegmentedColormap.from_list('custom', colors, N=n_bins)
# 从 RGB 值创建
colors = [(0, 0, 1), (1, 1, 1), (1, 0, 0)] # RGB 元组
cmap = LinearSegmentedColormap.from_list('custom', colors)
# 使用自定义色图
ax.imshow(data, cmap=cmap)
### 离散色图
python
import matplotlib.colors as mcolors
# 创建离散色图