毕设做炼丹相关的课题,所以有不少的画图需求。python下科研画图大概无非就是Matplotlib,说句大实话这个库虽然是仿MatLab的画图功能但是还是差强人意。尤其在出图之后的交互上,MatLab中还可以手动添加标记等等,而Matplotlib基本只能靠代码实现。所以推荐画图能用MatLab就用MatLab~

本篇会不定期更新,作为使用过程疑难点的备忘录

Matplotlib Ver 3.4.2

设置全局字体

论文用图常常需要中文字体为宋体,英文数字字体为Times New Roman,所以合适的做法就是该字体为默认字体。参考了这里的做法

1
2
3
4
5
6
7
8
9
from matplotlib import rcParams

config = {
"font.family": 'serif',
"mathtext.fontset": 'stix',
"font.serif": ['SimSun'],
"axes.unicode_minus": False
}
rcParams.update(config)

SimSun就是宋体,serif与Times New Roman字体几乎一致。需要特别注意"axes.unicode_minus": False项,不添加该设置会产生warning且负号无法显示,下图为样图
matplotlib_ex1

设置坐标轴刻度字体大小

标签字体属性设置较为简单,但是坐标轴刻度设置就有点折腾了,尤其像是我这种习惯用面型对象API的写法

  • 全局设置
1
2
plt.rc('xtick',labelsize=8)
plt.rc('ytick',labelsize=8)
  • 单独设置某个axis
1
ax.tick_params(axis="x", labelsize=8)

labelsize就是tick大小(为啥叫label),axis参数可选xyboth。文档在这里

关闭边框显示

1
2
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

设置边框粗细

1
2
3
4
ax.spines['bottom'].set_linewidth(2)   # 设置底部坐标轴的粗细
ax.spines['left'].set_linewidth(2) # 设置左边坐标轴的粗细
ax.spines['right'].set_linewidth(2) # 设置右边坐标轴的粗细
ax.spines['top'].set_linewidth(2) # 设置右边坐标轴的粗细