Matplotlib绘图之Times New Roman&Helvetica
- 问题描述
- plt绘图中如何设置Times New Roman字体?
- plt绘图中如何设置Helvetica字体?
-
- plt 绘图字体设置
- plt 绘图Helvetica字体设置
-
- 字体文件路径
- 字体下载
- 删除 matplotlib 的缓冲目录
- 修改文件 matplotlibrc,增加配置
- 重启
- Validation
问题描述
论文插图字体一般要求Times New Roman或者Helvetica字体,前者不必说,字体也还不错,应用也比较广泛,但有个问题是中文显示是方框,后者是MATLAB默认字体,起初接触的时候还没觉得如何,后来随着对各种字体的摸索,当然也是期刊要求,发现她(Helvetica)真好看!pycharm中使用python包matplotlib进行科研绘图,这两款字体中俺心心念念的Helvetica字体却无法被用到,虽然与其长相相似的Arial字体可以用,但强迫症的我决定抽出时间解决这个问题。因为我从未见过真正的Helvetica长啥样,请听我细细道来。
plt绘图中如何设置Times New Roman字体?
虽然说更喜欢Helvetica(下文以H代之),但是Times New Roman (T) 也不错,而且最先接触的正式西文字体是T,但是,不知道咋回事,python绘图中Times New Roman 字体无法设置粗细,这不致命,致命的是它始终显示粗体。这咋整?(正经地说,“这应当如何解决呢?”)搜寻了大量方法,真的是大量,然后在组内同学帮助下找到了以下博客文章,解决了该问题,用上了可变化粗细的T字体,至少一字在手科研绘图不愁。此处不赘述,亲测2次(python 3.7和3.8两次都用了这个方法),链接:
- 使用matplotlib修改字体之Times New Roman
- 解决Matplotlib中Times New Roman字体无法改变字体
以上两篇文章的方法大致相同,希望可以解决字体问题。赞两位博主。
plt绘图中如何设置Helvetica字体?
这是本文重点,分三个小节。
plt 绘图字体设置
首先看看plt中字体输入要求:
要在图中显示相应字体,至少要设置family这一项,先选字体家族(绿色箭头所指),然后设置具体的字体,当然也可直接设置family为具体字体的名字。T字体在serif中,H字体在sans-serif中。
直接放代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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() |
如果这时候要用以下这种设置:
1 2 3 4 | font = {<!-- -->'family': 'sans-serif', 'sans-serif': 'Helvetica', 'weight': 'normal', 'size': 10} |
恭喜你,你将会看到如下错误:
UserWarning: findfont: Font family [‘sans-serif‘] not found. Falling back to DejaVu Sans.
然后就使用默认字体来绘图了。
plt 绘图Helvetica字体设置
解决方法来自于该博客:
Python数据可视化第 2 讲:matplotlib 绘图中文字体设置
以及 Font family [‘sans-serif’] not found. Falling back to DejaVu Sans. Solution
==================方法描述:
字体文件路径
1 2 | import matplotlib print(matplotlib.matplotlib_fname()) |
F:\python38\lib\site-packages\matplotlib\mpl-data\matplotlibrc
找到
字体下载
有钱人下正版,没钱人下。。。不下正版就是了,分享一个链接:Helvetica字体 免费版 下载之家 ; 正版链接:Helvetica 害,几十美刀吧也就。嗯。
以第一种方法为例,解压如下(解压密码在下载之家网站上有说明):
把该
删除 matplotlib 的缓冲目录
1 2 | import matplotlib print(matplotlib.get_cachedir()) |
C:\Users\Asus.matplotlib
Windows中手动删除该路径文件就行。
修改文件 matplotlibrc,增加配置
该文件仍在字体路径下:
用txt、notepad++、python都可以打开编辑。别问我为啥知道,因为都试过。大概在228-259行。
1 2 3 4 5 6 | # 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,重启。
Validation
到了熟悉的实验验证环节,证明方法的有效性(effectiveness)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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。坑。我吐了,想到这感觉被骗了许多年。
好了,到此结束。