图片相关

这部分主要介绍在论文写作过程中,如何绘图、图片中使用的字体与字号、以及如何对图片进行后处理。

绘图

pyplot绘图

图片的宽度,对于单栏的图片来说,建议设置为3.5英寸(约8.89厘米);对于双栏的图片来说,建议设置为7.16英寸(约18.19厘米),图片的分辨率建议设置为600dpi。

对于图片的高度,不要超过8.5英寸(约21.59厘米),一般而言,单栏图片的高度设置为2.4英寸(约6.1厘米),一种比较适合的配置如下代码所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import matplotlib.pyplot as plt

FIG_W = 3.5 # 单栏图片宽度,单位:英寸
FIG_H = 2.4 # 图片高度,单位:英寸

plt.rcParams.update({
"font.family": "Times New Roman", # 字体设置
"font.size": 8, # 默认字体大小
"axes.labelsize": 8, # 坐标轴标签字体大小
"axes.titlesize": 8, # 坐标轴标题字体大小
"legend.fontsize": 7, # 图例字体大小
"xtick.labelsize": 7, # x轴刻度字体大小
"ytick.labelsize": 7, # y轴刻度字体大小
"savefig.dpi": 600, # 提高位图及 rasterized 元素的输出分辨率
"pdf.fonttype": 42, # 保存为pdf时,字体类型设置(图片中的字是矢量的,而且可以被选中复制)
"ps.fonttype": 42, # 保存为ps时,字体类型设置(图片中的字是矢量的,而且可以被选中复制)
})


fig, ax = plt.subplots(figsize=(FIG_W, FIG_H))

也可以尝试使用seabornseaborn是基于matplotlib的一个高级绘图库,提供了更美观的默认样式和配色方案。seaborn本身封装了很多matplotlib的绘图接口,但这里只展示用其修改matplotlib的样式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import seaborn as sns
import matplotlib.pyplot as plt

FIG_W = 3.5 # 单栏图片宽度,单位:英寸
FIG_H = 2.4 # 图片高度,单位:英寸

sns.set_theme(
context="paper", # 使用适合论文图片的整体尺寸比例
style="ticks", # 简洁的白底 + 坐标轴刻度风格
palette="colorblind", # 设置默认色觉友好配色,可被显式 color 覆盖
font_scale=1.0, # 不额外缩放 paper context 的字体
)

plt.rcParams.update({
# 字体
"font.family": "Times New Roman", # 普通文本明确使用 Times New Roman
"mathtext.fontset": "stix", # 数学公式使用与 Times 风格协调的 STIX Math
# "mathtext.fontset": "cm", # 使用 IEEEtran 正文中的公式字体 Computer Modern
# STIX Math 更加接近 Times 风格。而且其实很多字符上面,STIX Math 和 Computer Modern 风格的差别并不大。如果追求与正文公式字体一致,就用cm,如果追求图中字体统一,就用stix.

# 曲线
"lines.linewidth": 1.0, # paper 默认约 1.2 pt;略微减细,适合单栏小尺寸图片
"lines.markersize": 3.0, # paper 默认约 4.8 pt;减小 marker,避免视觉占比过大

# 坐标轴
"axes.linewidth": 0.8, # paper 默认约 1.0 pt;减细坐标轴边框
"xtick.major.width": 0.8, # 与坐标轴边框保持一致
"ytick.major.width": 0.8,
"xtick.minor.width": 0.6, # 次刻度稍细,形成视觉层级
"ytick.minor.width": 0.6,

# Legend
"legend.frameon": False, # 去除 legend 外框,使论文图片更简洁

# 输出
"savefig.dpi": 600, # 提高位图及 rasterized 元素的输出分辨率
"pdf.fonttype": 42, # PDF 使用 TrueType/Type 42,而非默认 Type 3
"ps.fonttype": 42, # PS/EPS 同样使用 Type 42 字体
})

fig, ax = plt.subplots(figsize=(FIG_W, FIG_H))

使用两种默认配置绘制出来图效果如下图所示,左边的图使用的是第一种配置,右边的图使用的是第二种配置:整体来看第二种配置优化得更完全,字体大小感觉更加合适,特别是marksizemathtext.fontset的设置,使得图中曲线的marker不会过大,且数学公式的字体与正文的Times New Roman风格更协调。

不同matplotlib配置的效果对比

用于对比的绘图的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from cycler import cycler


# ============================================================
# 图片尺寸
# ============================================================

FIG_W = 3.5 # IEEE 单栏图片宽度,单位:英寸
FIG_H = 2.4 # 图片高度,单位:英寸


# ============================================================
# 测试数据
# ============================================================

x = np.linspace(0, 10, 11)

y1 = 0.75 * x + 1.0
y2 = 0.50 * x + 2.0
y3 = 0.30 * x + 3.0


# ============================================================
# 配置 1:原始 Matplotlib 学术绘图配置
# ============================================================

config_1 = mpl.rcParamsDefault.copy()

config_1.update({
"font.family": "Times New Roman", # 字体设置
"font.size": 8, # 默认字体大小
"axes.labelsize": 8, # 坐标轴标签字体大小
"axes.titlesize": 8, # 坐标轴标题字体大小
"legend.fontsize": 7, # 图例字体大小
"xtick.labelsize": 7, # x 轴刻度字体大小
"ytick.labelsize": 7, # y 轴刻度字体大小

"savefig.dpi": 600, # 位图输出分辨率,统一采用 600 dpi
"pdf.fonttype": 42, # PDF 中使用 Type 42 字体
"ps.fonttype": 42, # PS/EPS 中使用 Type 42 字体
})


# ============================================================
# 配置 2:Seaborn paper + 自定义微调
# ============================================================

# 从 Matplotlib 原始默认配置开始,确保不受当前全局配置影响
config_2 = mpl.rcParamsDefault.copy()

# 等价于 sns.set_theme(
# context="paper",
# style="ticks",
# palette="colorblind",
# font_scale=1.0,
# )
config_2.update(sns.axes_style("ticks"))
config_2.update(sns.plotting_context("paper", font_scale=1.0))

# 设置 Seaborn colorblind 默认颜色循环
config_2["axes.prop_cycle"] = cycler(
color=sns.color_palette("colorblind").as_hex()
)

# 在 Seaborn paper 的基础上进一步覆盖
config_2.update({
# --------------------------------------------------------
# 字体
# --------------------------------------------------------

"font.family": "Times New Roman", # 普通文本明确使用 Times New Roman
"mathtext.fontset": "stix", # 数学公式使用 STIX Math

# --------------------------------------------------------
# 曲线
# --------------------------------------------------------

"lines.linewidth": 1.0, # Seaborn paper 默认约 1.2 pt;
# 略微减细,适合单栏小尺寸论文图片

"lines.markersize": 3.0, # Seaborn paper 默认约 4.8 pt;
# 减小 marker,避免占据过多视觉空间

# --------------------------------------------------------
# 坐标轴与刻度
# --------------------------------------------------------

"axes.linewidth": 0.8, # Seaborn paper 默认约 1.0 pt;
# 减细坐标轴边框

"xtick.major.width": 0.8, # 主刻度线宽与坐标轴边框保持一致
"ytick.major.width": 0.8,

"xtick.minor.width": 0.6, # 次刻度稍细,形成视觉层级
"ytick.minor.width": 0.6,

# --------------------------------------------------------
# 图例
# --------------------------------------------------------

"legend.frameon": False, # 去除图例外框,使论文图片更加简洁

# --------------------------------------------------------
# 输出
# --------------------------------------------------------

"savefig.dpi": 600, # 位图输出统一采用 600 dpi
"pdf.fonttype": 42, # PDF 使用 Type 42 字体
"ps.fonttype": 42, # PS/EPS 使用 Type 42 字体
})


# ============================================================
# 公共绘图函数
# ============================================================

def draw_example(ax, title):
"""绘制完全相同的数据,用于比较两种绘图配置。"""

# 不显式指定 color:
# 左图使用 Matplotlib 默认颜色循环;
# 右图使用 Seaborn colorblind 颜色循环。
ax.plot(
x,
y1,
marker="o",
linestyle="-",
label="Baseline",
)

ax.plot(
x,
y2,
marker="s",
linestyle="--",
label="Method A",
)

ax.plot(
x,
y3,
marker="^",
linestyle="-.",
label="Proposed",
)

# 同时包含普通文本和数学公式,用于观察字体差异
ax.set_xlabel(r"Frequency $f_{\mathrm{max}}$ (MHz)")
ax.set_ylabel(r"Normalized Power $P/P_0$")

ax.set_title(title)

# 开启次刻度,便于观察 tick 风格
ax.minorticks_on()

ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

ax.legend()


# ============================================================
# 创建对比图
# ============================================================

# 两个单栏图并排,因此总宽度取约 2 × 3.5 inch
fig = plt.figure(
figsize=(7.2, 2.8),
layout="constrained",
)


# ------------------------------------------------------------
# 左图:配置 1
# ------------------------------------------------------------

with mpl.rc_context(config_1):
ax1 = fig.add_subplot(1, 2, 1)
draw_example(
ax1,
"Matplotlib Configuration",
)


# ------------------------------------------------------------
# 右图:配置 2
# ------------------------------------------------------------

with mpl.rc_context(config_2):
ax2 = fig.add_subplot(1, 2, 2)
draw_example(
ax2,
"Seaborn Configuration",
)


# ============================================================
# 保存
# ============================================================

# 矢量版本:适合论文
fig.savefig(
"style_comparison.pdf",
dpi=600,
bbox_inches="tight",
)

# WebP:方便快速查看对比效果
fig.savefig(
"style_comparison.webp",
dpi=300,
bbox_inches="tight",
)

plt.show()

上述主要是展示绘图的默认配置,具体的配色可以根据具体的期刊和需求进行修改,可以使用如下的配色:(其中红蓝绿主要作为对比色)

  • #a50f15
  • #fdd0a2
  • #fcae91
  • #08519c
  • #006d2c
  • #6baed6

画图

画图的配色与字体

可以使用如下基础配色(采用莫兰迪色系,整体饱和度低、灰调、优雅):

  • 雾霾蓝 / Dusty Blue#6F8FB6
  • 鼠尾草绿 / Sage#8FAE9A
  • 薄荷青 / Muted Mint#9FC2B4
  • 柔珊瑚 / Muted Coral#D08C7A
  • 灰紫丁香 / Soft Lavender#A8A0C8
  • 奶油米 / Warm Sand(背景底)#EFE7DB
  • 深墨褐 / Warm Charcoal(正文文字)#2F2B28

图片处理

使用PPT或者使用Visio绘图之后,可以将绘制的内容导出为pdf,而且可以导出指定页面, 但是还是存在一个问题,就是导出的pdf可能会存在大量的空白,这时候可以Tex Live自带的pdfcrop命令进行裁剪:

1
pdfcrop input.pdf output.pdf

建议导出格式

虽然PPT可以将选中的内容直接导出为图片,但是当导出为svg格式时,其文字排版会出现问题,因此建议导出为pdf格式。而且latex原生就支持pdf格式的内容插入,如果是svg的话,还需要引入额外的宏包进行支持。

至于png格式,只建议在使用word的时候使用,这时候可以使用ghostscript或者convert将pdf转换为png格式。

pdf转png命令

使用Tex Live自带的ghostscript命令如下:

1
gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pngalpha -r600 -sOutputFile=output-%03d.png input.pdf

使用ImageMagick的convert命令如下:

1
convert -density 600 input.pdf -quality 100 output.png

投稿相关

IEEE作者中心,其中journarl author中包含了很多对作者有用的信息,比如一些实用的工具
IEEE期刊投稿地址
IEEE pdf检测工具地址
IEEE LaTeX分析器

不同期刊的要求

下面的要求可能会发生变化,具体以官网为准

TACD

参考文献

论文提交地址:tcad

提交的稿件要求:

  1. 论文模板下载地址:tcad模板
  2. 论文最大页数:Research Articles: 14 pages, Brief Papers: 5 pages
  3. 包含100-250字的摘要,4-8个关键词

TVLSI

参考文献

论文提交地址:tvlsi

提交的稿件要求:
1. 论文模板下载地址:tvlsi模板
2. 论文页数要求:Regular papers: 8-14 pages, Brief papers: 4-5 pages