论文插图字体一般要求Times New Roman或者Helvetica字体,前者不必说,字体也还不错,应用也比较广泛,但有个问题是中文显示是方框,后者是MATLAB默认字体,起初接触的时候还没觉得如何,后来随着对各种字体的摸索,当然也是期刊要求,发现她(Helvetica)真好看!pycharm中使用python包matplotlib进行科研绘图,这两款字体中俺心心念念的Helvetica字体却无法被用到,虽然与其长相相似的Arial字体可以用,但强迫症的我决定抽出时间解决这个问题。因为我从未见过真正的Helvetica长啥样,请听我细细道来。
虽然说更喜欢Helvetica(下文以H代之),但是Times New Roman (T) 也不错,而且最先接触的正式西文字体是T,但是,不知道咋回事,python绘图中Times New Roman 字体无法设置粗细,这不致命,致命的是它始终显示粗体。这咋整?(正经地说,“这应当如何解决呢?”)搜寻了大量方法,真的是大量,然后在组内同学帮助下找到了以下博客文章,解决了该问题,用上了可变化粗细的T字体,至少一字在手科研绘图不愁。此处不赘述,亲测2次(python 3.7和3.8两次都用了这个方法),链接:
这是本文重点。
首先看看plt中字体输入要求:
要在图中显示相应字体,至少要设置family这一项,先选字体家族(绿色箭头所指),然后设置具体的字体,当然也可直接设置family为具体字体的名字。T字体在serif中,H字体在sans-serif中。
直接放代码:
import matplotlib.pyplot as plt
plt.rcParams['axes.linewidth'] = 1 # 图框宽度
plt.rcParams['figure.dpi'] = 300 # plt.show显示分辨率
font = {'family': 'serif',
'serif': 'Times New Roman',
'weight': 'normal',
'size': 10}
plt.rc('font', **font)
plt.figure()
x = [1, 2, 3]
y = [k ** 2 for k in x]
plt.plot(x, y)
plt.title('This is Times New Roman Font', fontweight='normal')
plt.savefig(r"C:\Users\Asus\Desktop\times1.jpg", dpi=600, bbox_inches='tight', pad_inches=0.01)
plt.show()
font = {'family': 'sans-serif',
'sans-serif': 'Helvetica',
'weight': 'normal',
'size': 10}
恭喜你,你将会看到如下错误:
UserWarning: findfont: Font family [‘sans-serif‘] not found. Falling back to DejaVu Sans.
然后就使用默认字体来绘图了。
解决方法来自于该博客:
Python数据可视化第 2 讲:matplotlib 绘图中文字体设置
以及 Font family [‘sans-serif’] not found. Falling back to DejaVu Sans. Solution
==================方法描述:
import matplotlib
print(matplotlib.matplotlib_fname())
F:\python38\lib\site-packages\matplotlib\mpl-data\matplotlibrc
找到F:\python38\lib\site-packages\matplotlib\mpl-data
路径即可,然后下载字体Helvetica。
有钱人下正版,没钱人下。。。不下正版就是了,分享一个链接:Helvetica字体 免费版 下载之家 ; 正版链接:Helvetica 害,几十美刀吧也就。嗯。
以第一种方法为例,解压如下(解压密码在下载之家网站上有说明):
把该.tff
文件复制到这个路径下:F:\python38\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
.
当然你可以进一步把它存到电脑的系统字体里:控制面板\外观和个性化\字体
,然后可以在adobe等画图软件里也使用它。
import matplotlib
print(matplotlib.get_cachedir())
C:\Users\Asus.matplotlib
该文件仍在字体路径下:
用txt、notepad++、python都可以打开编辑。别问我为啥知道,因为都试过。大概在228-259行。
# 1.去掉下面一行的 # 号
font.family : sans-serif
# 2.去掉下面一行前面的 # 号,并在冒号后面添加 Hevetica,如果有就不需要加了
font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
# 3.去掉下面一行前面的 # 号,并将True改为False
axes.unicode_minus : False
关了python,重启。
到了熟悉的实验验证环节,证明方法的有效性(effectiveness)。
plt.rcParams['axes.linewidth'] = 1 # 图框宽度
plt.rcParams['figure.dpi'] = 300 # 图框宽度
font = {'family': 'sans-serif',
'sans-serif': 'Helvetica',
'weight': 'normal',
'size': 10}
plt.rc('font', **font) # pass in the font dict as kwargs
plt.figure()
x = [1, 2, 3]
y = [k ** 2 for k in x]
plt.plot(x, y)
plt.title('This is Helvetica Font', fontweight='normal')
plt.savefig(r"C:\Users\Asus\Desktop\helvetica1.jpg", dpi=600, bbox_inches='tight', pad_inches=0.01)
plt.show()
与MATLAB对比一下:
当然,前面说过,Windows上面会把Helvetica字体给你弄成Arial字体,所以你见到的H都是Arial,包括MATLAB和WORD里面的字体,我一开始想把字体文件直接移植过来… 后来发现word的字体文件里面根本没有H字体,那他咋实现Helvetica字体的?问就是Arial。坑。我吐了,想到这感觉被骗了许多年。
好了,到此结束。