python绘图之Times New Roman字体以及Helvetica字体

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两次都用了这个方法),链接:

  1. 使用matplotlib修改字体之Times New Roman
  2. 解决Matplotlib中Times New Roman字体无法改变字体
    以上两篇文章的方法大致相同,希望可以解决字体问题。赞两位博主。

plt绘图中如何设置Helvetica字体?

这是本文重点。

plt 绘图字体设置

首先看看plt中字体输入要求:
python绘图之Times New Roman字体以及Helvetica字体_第1张图片
要在图中显示相应字体,至少要设置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()

python绘图之Times New Roman字体以及Helvetica字体_第2张图片
如果这时候要用以下这种设置:

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

==================方法描述:

字体文件路径

import matplotlib    
print(matplotlib.matplotlib_fname())

F:\python38\lib\site-packages\matplotlib\mpl-data\matplotlibrc

找到F:\python38\lib\site-packages\matplotlib\mpl-data路径即可,然后下载字体Helvetica。
python绘图之Times New Roman字体以及Helvetica字体_第3张图片

字体下载

有钱人下正版,没钱人下。。。不下正版就是了,分享一个链接:Helvetica字体 免费版 下载之家 ; 正版链接:Helvetica 害,几十美刀吧也就。嗯。
以第一种方法为例,解压如下(解压密码在下载之家网站上有说明):
python绘图之Times New Roman字体以及Helvetica字体_第4张图片
python绘图之Times New Roman字体以及Helvetica字体_第5张图片
把该.tff文件复制到这个路径下:F:\python38\Lib\site-packages\matplotlib\mpl-data\fonts\ttf.
python绘图之Times New Roman字体以及Helvetica字体_第6张图片

当然你可以进一步把它存到电脑的系统字体里:控制面板\外观和个性化\字体,然后可以在adobe等画图软件里也使用它。
python绘图之Times New Roman字体以及Helvetica字体_第7张图片

删除 matplotlib 的缓冲目录

import matplotlib    
print(matplotlib.get_cachedir())

C:\Users\Asus.matplotlib

Windows中手动删除该路径文件就行。
python绘图之Times New Roman字体以及Helvetica字体_第8张图片

修改文件 matplotlibrc,增加配置

该文件仍在字体路径下:
python绘图之Times New Roman字体以及Helvetica字体_第9张图片
用txt、notepad++、python都可以打开编辑。别问我为啥知道,因为都试过。大概在228-259行。
python绘图之Times New Roman字体以及Helvetica字体_第10张图片

# 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)。

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()

python绘图之Times New Roman字体以及Helvetica字体_第11张图片
与MATLAB对比一下:
python绘图之Times New Roman字体以及Helvetica字体_第12张图片
当然,前面说过,Windows上面会把Helvetica字体给你弄成Arial字体,所以你见到的H都是Arial,包括MATLAB和WORD里面的字体,我一开始想把字体文件直接移植过来… 后来发现word的字体文件里面根本没有H字体,那他咋实现Helvetica字体的?问就是Arial。坑。我吐了,想到这感觉被骗了许多年。
好了,到此结束。

你可能感兴趣的:(python,可视化,matplotlib)