Fork me on github

论文写作:PyPlot或MATLAB图像全局客制化与矢量图导出

Python

在PyPlot中,我们可以进行这样的设置,对matplotlib进行客制化,并导出矢量图:

# 在使用pyplot绘图,可以通过下面的参数进行全局的客制化
from matplotlib import pyplot as plt
plt.rcParams['axes.grid'] = True
plt.rcParams['figure.dpi'] = 600
plt.rcParams['figure.figsize'] = (8, 4)
plt.rcParams['font.family'] ='serif'
plt.rcParams['lines.linewidth'] = 1
plt.rcParams['mathtext.fontset'] = 'cm'
plt.rcParams['savefig.format'] = 'pdf'
plt.rcParams['savefig.transparent'] = True
plt.rcParams['savefig.bbox'] = 'tight'
plt.rcParams['savefig.pad_inches'] = 0
plt.rcParams['pdf.fonttype'] = 42
plt.rcParams['ps.fonttype'] = 42

# 如果在Juypter Notebook里,也可以通过下面的方式显示矢量图
import matplotlib_inline
matplotlib_inline.backend_inline.set_matplotlib_formats('svg')

# 在导出图片时,记得选择矢量图格式(如PDF、SVG、EPS),例如:
plt.savefig('test.pdf')

Matplotlib默认使用Type 3字体,这在许多期刊和会议是不被允许的。参考《Avoiding Type 3 fonts in matplotlib plots》,我们fonttype其设置为42,指定导出的PDF使用True Type字体。

更多参数可以参阅官方文档:Customizing Matplotlib with style sheets and rcParams

MATLAB

在MATLAB中,我们可以进行这样的设置,对MATLAB进行客制化,并导出矢量图:

% MATLAB图像全局客制化
% 字体使用CMU Serif字体,与LaTeX保持一致
set(0, 'DefaultTextFontname', 'CMU Serif');
set(0, 'DefaultAxesFontName', 'CMU Serif');

% 默认打开MATLAB的网格线
set(groot, 'defaultAxesXGrid', 'on');
set(groot, 'defaultAxesYGrid', 'on');
set(groot, 'defaultAxesZGrid', 'on');

% 去除导出图片的白色边缘
set(groot, 'defaultAxesXLimSpec', 'padded');
set(groot, 'defaultAxesYLimSpec', 'padded');
set(groot, 'defaultAxesZLimSpec', 'padded');

我们可以通过这样的命令导出图片

figure();

% ... 绘图命令 ... %

pbaspect([3 1 1]) % 设置各个坐标轴的比例
exportgraphics(gcf, 'img.pdf') % 导出矢量图格式的图片,如PDF、SVG、EPS等
posted @ 2023-07-01 17:09  fang-d  阅读(224)  评论(0编辑  收藏  举报