关于 scientific-visualization
面向科研作者的可视化技能,帮助使用 matplotlib、seaborn 和 plotly 制作符合期刊要求的图表。涵盖色盲友好配色、多面板布局及格式和分辨率规范。
主要功能
- 01期刊样式与尺寸配置
- 02色盲友好配色与灰度检查
- 03多面板图表布局
- 04统计图表与误差标记
- 05按出版规范导出图像
适用场景
- 01为论文制作图表
- 02按指定期刊要求准备投稿图片
- 03修整现有图表以符合出版规范
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hkphysics/ scientific-agent-skills --skill scientific-visualization安装后在 Claude Code 中输入/scientific-visualization确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/color_palettes.pynature.mplstylepresentation.mplstylepublication.mplstylereferences/color_palettes.mdjournal_requirements.mdmatplotlib_examples.mdpublication_guidelines.mdscripts/figure_export.pystyle_presets.py详细介绍
科学可视化
概述
科学可视化将数据转换为清晰、准确的出版级图表。创建可直接用于期刊的图表,包括多面板布局、误差线、显著性标记和色盲友好型配色方案。使用 matplotlib、seaborn 和 plotly 导出为 PDF/EPS/TIFF 格式,用于论文。
何时使用此技能
以下情况应使用此技能:
- 为科学论文创建图表或可视化内容
- 准备期刊投稿所需的图片(Nature、Science、Cell、PLOS 等)
- 确保图片对色盲人士友好且易于访问
- 创建样式一致的多面板图片
- 按正确的分辨率和格式导出图片
- 遵循特定的出版指南
- 改进现有图片,使其符合出版标准
- 创建需同时适用于彩色和灰度模式的图片
快速入门指南
基本出版级图片
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))
sns.boxplot(data=df, x='treatment', y='response',
order=['Control', 'Low', 'High'], palette='Set2', 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):
推荐:Okabe-Ito 配色方案(所有类型的色盲人士均可区分):
# 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:单栏 89 mm,双栏 183 mm
- Science:单栏 55 mm,双栏 175 mm
- Cell:单栏 85 mm,双栏 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')
常见任务
任务 1:创建可用于出版的折线图
完整代码请参见 references/matplotlib_examples.md 中的示例 1。
关键步骤:
- 应用出版样式
- 根据目标期刊设置合适的图片尺寸
- 使用色盲友好型颜色
- 添加正确表示方式的误差线(SEM、SD 或 CI)
- 为坐标轴标注单位
- 移除不必要的边框线
- 以矢量格式保存
使用 seaborn 自动生成置信区间:
import seaborn as sns
fig, ax = plt.subplots(figsize=(5, 3))
sns.lineplot(data=timeseries, x='time', y='measurement',
hue='treatment', errorbar=('ci', 95),
markers=True, ax=ax)
ax.set_xlabel('Time (hours)')
ax.set_ylabel('Measurement (AU)')
sns.despine()
任务 2:创建多面板图片
完整代码请参见 references/matplotlib_examples.md 中的示例 2。
关键步骤:
- 使用
GridSpec灵活安排布局 - 确保各面板的样式一致
- 添加粗体面板标签(A、B、C 等)
- 对齐相关面板
- 确保所有文本在最终尺寸下均清晰可读
任务 3:使用合适的色图创建热图
完整代码请参阅 references/matplotlib_examples.md 中的示例 4。
关键步骤:
- 使用感知均匀的色图(
viridis、plasma、cividis) - 添加带标签的颜色条
- 对于发散数据,使用适合色盲用户的发散色图(
RdBu_r、PuOr) - 为发散色图设置合适的中心值
- 在灰度模式下测试外观
使用 seaborn 绘制相关矩阵:
import seaborn as sns
fig, ax = plt.subplots(figsize=(5, 4))
corr = df.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='RdBu_r', center=0, square=True,
linewidths=1, cbar_kws={'shrink': 0.8}, ax=ax)
任务 4:为特定期刊准备图表
工作流:
- 查看期刊要求:
references/journal_requirements.md - 配置 matplotlib 以符合期刊要求:
from style_presets import configure_for_journal configure_for_journal('nature', figure_width='single') - 创建图表(将自动调整为合适的大小)
- 按照期刊规范导出:
from figure_export import save_for_journal save_for_journal(fig, 'figure1', journal='nature', figure_type='line_art')
任务 5:修正现有图表,使其符合出版标准
检查清单(完整清单见 references/publication_guidelines.md):
- 检查分辨率:确认 DPI 符合期刊要求
- 检查文件格式:绘图使用矢量格式,图像使用 TIFF/PNG
- 检查颜色:确保适合色盲用户
- 检查字体:最终尺寸下至少为 6-7 pt,并使用无衬线字体
- 检查标签:所有坐标轴均标注名称和单位
- 检查尺寸:与期刊栏宽一致
- 测试灰度效果:确保图表在无彩色的情况下仍易于解读
- 移除图表赘饰:不使用不必要的网格、3D 效果和阴影
任务 6:创建适合色盲用户的可视化图表
策略:
- 使用
assets/color_palettes.py中的推荐调色板 - 添加冗余编码(线条样式、标记、图案)
- 使用色盲模拟器进行测试
- 确保兼容灰度模式
示例:
from color_palettes import apply_palette
import matplotlib.pyplot as plt
apply_palette('okabe_ito')
# Add redundant encoding beyond color
line_styles = ['-', '--', '-.', ':']
markers = ['o', 's', '^', 'v']
for i, (data, label) in enumerate(datasets):
plt.plot(x, data, linestyle=line_styles[i % 4],
marker=markers[i % 4], label=label)
统计严谨性
始终包含:
- 误差线(SD、SEM 或 CI——在图注中注明具体类型)
- 图表或图注中的样本量(n)
- 统计显著性标记(、、)
- 条件允许时显示各个数据点(而非仅显示汇总统计量)
含统计信息的示例:
# Show individual points with summary statistics
ax.scatter(x_jittered, individual_points, alpha=0.4, s=8)
ax.errorbar(x, means, yerr=sems, fmt='o', capsize=3)
# Mark significance
ax.text(1.5, max_y * 1.1, '***', ha='center', fontsize=8)
使用不同绘图库
Matplotlib
- 对出版细节的控制最全面
- 最适合复杂的多面板图表
- 使用提供的样式文件,以保持格式一致
- 大量示例请参阅
references/matplotlib_examples.md
Seaborn
Seaborn 构建于 matplotlib 之上,为统计图表提供高级、面向数据集的接口。它能够以最少的代码创建适合出版的统计可视化图表,同时完全兼容 matplotlib 的自定义功能。
用于科学可视化的主要优势:
- 自动进行统计估算并计算置信区间
- 内置多面板图表(分面)支持
- 默认使用适合色盲用户的调色板
- 使用 pandas DataFrame 的面向数据集 API
- 将变量映射到视觉属性的语义映射
使用出版样式快速入门
始终先应用 matplotlib 出版样式,再配置 seaborn:
import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style
# Apply publication style
apply_publication_style('default')
# Configure seaborn for publication
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind') # Use colorblind-safe palette
# Create figure
fig, ax = plt.subplots(figsize=(3.5, 2.5))
sns.scatterplot(data=df, x='time', y='response',
hue='treatment', style='condition', ax=ax)
sns.despine() # Remove top and right spines
出版物中常见的图表类型
统计比较:
# Box plot with individual points for transparency
fig, ax = plt.subplots(figsize=(3.5, 3))
sns.boxplot(data=df, x='treatment', y='response',
order=['Control', 'Low', 'High'], palette='Set2', 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()
分布分析:
# Violin plot with split comparison
fig, ax = plt.subplots(figsize=(4, 3))
sns.violinplot(data=df, x='timepoint', y='expression',
hue='treatment', split=True, inner='quartile', ax=ax)
ax.set_ylabel('Gene Expression (AU)')
sns.despine()
相关矩阵:
# Heatmap with proper colormap and annotations
fig, ax = plt.subplots(figsize=(5, 4))
corr = df.corr()
mask = np.triu(np.ones_like(corr, dtype=bool)) # Show only lower triangle
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='RdBu_r', center=0, square=True,
linewidths=1, cbar_kws={'shrink': 0.8}, ax=ax)
plt.tight_layout()
带置信带的时间序列:
# Line plot with automatic CI calculation
fig, ax = plt.subplots(figsize=(5, 3))
sns.lineplot(data=timeseries, x='time', y='measurement',
hue='treatment', style='replicate',
errorbar=('ci', 95), markers=True, dashes=False, ax=ax)
ax.set_xlabel('Time (hours)')
ax.set_ylabel('Measurement (AU)')
sns.despine()
使用 Seaborn 创建多面板图表
使用 FacetGrid 自动创建分面:
# Create faceted plot
g = sns.relplot(data=df, x='dose', y='response',
hue='treatment', col='cell_line', row='timepoint',
kind='line', height=2.5, aspect=1.2,
errorbar=('ci', 95), markers=True)
g.set_axis_labels('Dose (μM)', 'Response (AU)')
g.set_titles('{row_name} | {col_name}')
sns.despine()
# Save with correct DPI
from figure_export import save_publication_figure
save_publication_figure(g.figure, 'figure_facets',
formats=['pdf', 'png'], dpi=300)
将 seaborn 与 matplotlib 子图结合使用:
# Create custom multi-panel layout
fig, axes = plt.subplots(2, 2, figsize=(7, 6))
# Panel A: Scatter with regression
sns.regplot(data=df, x='predictor', y='response', ax=axes[0, 0])
axes[0, 0].text(-0.15, 1.05, 'A', transform=axes[0, 0].transAxes,
fontsize=10, fontweight='bold')
# Panel B: Distribution comparison
sns.violinplot(data=df, x='group', y='value', ax=axes[0, 1])
axes[0, 1].text(-0.15, 1.05, 'B', transform=axes[0, 1].transAxes,
fontsize=10, fontweight='bold')
# Panel C: Heatmap
sns.heatmap(correlation_data, cmap='viridis', ax=axes[1, 0])
axes[1, 0].text(-0.15, 1.05, 'C', transform=axes[1, 0].transAxes,
fontsize=10, fontweight='bold')
# Panel D: Time series
sns.lineplot(data=timeseries, x='time', y='signal',
hue='condition', ax=axes[1, 1])
axes[1, 1].text(-0.15, 1.05, 'D', transform=axes[1, 1].transAxes,
fontsize=10, fontweight='bold')
plt.tight_layout()
sns.despine()
适合出版物的调色板
Seaborn 内置了多种适合色盲用户的调色板:
# Use built-in colorblind palette (recommended)
sns.set_palette('colorblind')
# Or specify custom colorblind-safe colors (Okabe-Ito)
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
'#0072B2', '#D55E00', '#CC79A7', '#000000']
sns.set_palette(okabe_ito)
# For heatmaps and continuous data
sns.heatmap(data, cmap='viridis') # Perceptually uniform
sns.heatmap(corr, cmap='RdBu_r', center=0) # Diverging, centered
如何选择 Axes 级和 Figure 级函数
Axes 级函数(例如,scatterplot、boxplot、heatmap):
- 适用于构建自定义多面板布局
- 接受
ax=参数,可精确控制放置位置 - 与 matplotlib 子图的集成效果更好
- 对图表构成的控制力更强
fig, ax = plt.subplots(figsize=(3.5, 2.5))
sns.scatterplot(data=df, x='x', y='y', hue='group', ax=ax)
Figure 级函数(例如,relplot、catplot、displot):
- 适用于按分类变量自动创建分面
- 可创建样式一致的完整图表
- 非常适合探索性分析
- 使用
height和aspect设置尺寸
g = sns.relplot(data=df, x='x', y='y', col='category', kind='scatter')
使用 Seaborn 确保统计严谨性
Seaborn 会自动计算并显示不确定性:
# Line plot: shows mean ± 95% CI by default
sns.lineplot(data=df, x='time', y='value', hue='treatment',
errorbar=('ci', 95)) # Can change to 'sd', 'se', etc.
# Bar plot: shows mean with bootstrapped CI
sns.barplot(data=df, x='treatment', y='response',
errorbar=('ci', 95), capsize=0.1)
# Always specify error type in figure caption:
# "Error bars represent 95% confidence intervals"
绘制符合发表要求的 Seaborn 图表的最佳实践
-
始终先设置发表主题:
sns.set_theme(style='ticks', context='paper', font_scale=1.1) -
使用色盲友好型调色板:
sns.set_palette('colorblind') -
移除不必要的元素:
sns.despine() # Remove top and right spines -
合理控制图表尺寸:
# Axes-level: use matplotlib figsize fig, ax = plt.subplots(figsize=(3.5, 2.5)) # Figure-level: use height and aspect g = sns.relplot(..., height=3, aspect=1.2) -
尽可能显示单个数据点:
sns.boxplot(...) # Summary statistics sns.stripplot(..., alpha=0.3) # Individual points -
添加带单位的规范标签:
ax.set_xlabel('Time (hours)') ax.set_ylabel('Expression (AU)') -
以正确的分辨率导出:
from figure_export import save_publication_figure save_publication_figure(fig, 'figure_name', formats=['pdf', 'png'], dpi=300)
Seaborn 高级技巧
用于探索性分析的成对关系:
# Quick overview of all relationships
g = sns.pairplot(data=df, hue='condition',
vars=['gene1', 'gene2', 'gene3'],
corner=True, diag_kind='kde', height=2)
层次聚类热图:
# Cluster samples and features
g = sns.clustermap(expression_data, method='ward',
metric='euclidean', z_score=0,
cmap='RdBu_r', center=0,
figsize=(10, 8),
row_colors=condition_colors,
cbar_kws={'label': 'Z-score'})
带边际分布的联合分布:
# Bivariate distribution with context
g = sns.jointplot(data=df, x='gene1', y='gene2',
hue='treatment', kind='scatter',
height=6, ratio=4, marginal_kws={'kde': True})
常见 Seaborn 问题及解决方案
问题:图例位于绘图区外
g = sns.relplot(...)
g._legend.set_bbox_to_anchor((0.9, 0.5))
问题:标签重叠
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
问题:最终尺寸下文字太小
sns.set_context('paper', font_scale=1.2) # Increase if needed
更多资源
如需了解更多 seaborn 信息,请参阅:
skills/seaborn/SKILL.md- 全面的 seaborn 文档skills/seaborn/references/examples.md- 实用案例skills/seaborn/references/function_reference.md- 完整 API 参考skills/seaborn/references/objects_interface.md- 现代声明式 API
Plotly
- 用于探索的交互式图表
- 导出静态图像以供发表
- 配置为符合发表质量要求:
fig.update_layout(
font=dict(family='Arial, sans-serif', size=10),
plot_bgcolor='white',
# ... see matplotlib_examples.md Example 8
)
fig.write_image('figure.png', scale=3) # scale=3 gives ~300 DPI
资源
参考资料目录
根据需要加载以下内容,获取详细信息:
-
publication_guidelines.md:全面的最佳实践- 分辨率和文件格式要求
- 排版规范
- 布局和构图规则
- 统计严谨性要求
- 完整的发表检查清单
-
color_palettes.md:颜色使用指南- 含 RGB 值的色盲友好型调色板规范
- 顺序和发散色图建议
- 无障碍测试流程
- 特定领域的调色板(基因组学、显微镜)
-
journal_requirements.md:期刊专属规范- 各出版商的技术要求
- 文件格式和 DPI 规范
- 图表尺寸要求
- 速查表
-
matplotlib_examples.md:实用代码示例- 10 个完整的可运行示例
- 折线图、条形图、热图、多面板图表
- 期刊专属图表示例
- 各绘图库的使用技巧(matplotlib、seaborn、plotly)
脚本目录
使用这些辅助脚本实现自动化:
-
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():一键配置期刊样式- 直接运行:
python scripts/style_presets.py查看示例
资源文件目录
在图表中使用这些文件:
-
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 效果
- 所有图表的字体保持一致
- 显著性已清晰标注
- 图例清晰完整
使用此技能,确保科学图表达到最高出版标准,同时让所有读者都能轻松阅读。