前两天写论文,用Python绘制了论文里数据的曲线图,下面讲解一些关于Matplotlib配置的小技巧。
论文图片里的字体,要求:英文为五号,Times new roman;中文为五号,宋体。具体代码如下:
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.font_manager import FontProperties
from pylab import text
import codecs
import keyboard
# 字体设置
mpl.rcParams.update({ # 设置全局字体
'font.family': 'sans-serif',
'font.sans-serif': ['Times New Roman']
})
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
simsun = FontProperties(fname=r'fonts\simsun.ttc') # 宋体
times = FontProperties(fname=r'fonts\times.ttf') # Times new roman
fontcn = { # 设置中文字体,宋体,五号,常规
'fontproperties': simsun,
'size': 10.5,
'weight': 'normal'
}
fonten = { # 设置英文字体,Times new roman,五号,常规
'fontproperties': times,
'size': 10.5,
'weight': 'normal'
}
# 绘图
file_address = 'data/data.txt'
file = codecs.open(file_address, mode='r', encoding='UTF-8')
file_data = file.readlines() # 以行的形式读取所有数据,结果为字符串列表,一行为列表的一个元素
# 分配数据空间
data = list()
Inz = list()
Inf = list()
Out = list()
x = list()
# 将所读取的数据由字符串格式替换为数据格式
for file_line in file_data:
line_data = [float(i) for i in file_line.split()] # 对file_data的行进行切分,并转化为float格式
data.append(line_data) # 将所有数据存储到data中
file.close()
# 读取数据列
for data_line in data:
x.append(data_line[0])
Inz.append(data_line[1])
Inf.append(data_line[2])
Out.append(data_line[3])
# 显示
plt.plot(x,Inz,'-r',label='In+')
plt.plot(x,Inf,'-b',label='In-')
plt.plot(x,Out,'-g',label='Out')
plt.title(u'(a)运算放大器仿真曲线', fontdict=fontcn, y=-0.175) # 标题
plt.xlabel('U/V', fontdict=fonten) # x轴
plt.ylabel('U/V', fontdict=fonten) # y轴
plt.legend(loc=1,ncol=3) # loc = 0: 最优
# loc = 1: 右上
# loc = 2: 左上
# ncol:列数
# text(6.75, -4.3, u'(a)', fontdict=fonten)
plt.show()
# 关闭界面
while True:
if keyboard.is_pressed('q'):
plt.close('all')
break