问题描述
在linux使用matplotlib绘图时,发现图中的英语字体都不是times new Roman,一般论文或者其他情况要求times new Roman字体,而linux一般是没有预装这些字体。我在基于Ubuntu的bio-linux以及qiime2上面,发现正常安装一定会报错,几经搜索,找到一个可靠的安装流程,所以写下这篇博文。
解决方法
安装必要的支持库软件
这个fontconfig先下载,下面可能用得到
sudo apt-get install fontconfig
sudo apt install ttf-mscorefonts-installer
安装过程以及报错
下载完install ttf-mscorefonts-installer,会自动弹出一个对话框,让你点击ok,要注意此时需要用“Tab”键将光标移到ok之后,再回车,然后会有以下画面:
选中yes以后,就会有以下的报错:
不管你是选择run this action now,还是直接关闭,最后都是安装不成功的,这个时候就需要手动去安装字体。
解决办法
你的usr/share/package_data_downloads里有一个ttf-mscorefonts-installer,如下:
ttf-mscorefonts-installer是一个配置文件,打开会有一系列的链接,是用来下载字体文件的,当然也可以用别人已经下载好的文件。放在一个文件内,我的放在Downloads里面,这些文件含有的内容如下:
运行以下代码,会让你手动指定fonts的目录,将ttf-mscorefonts-installer的绝对目录输入到这里,点击确定:
sudo dpkg-reconfigure ttf-mscorefonts-installer
如果有以下报错:
可以执行以下命令,再重新进行配置,成功的界面如下:
#如果没有fontconfig,就不能运行这个命令
sudo fc-cache
## 安装成功
查看usr/share/fonts/turetype/msttcorefonts这个文件夹有超多字体就说明是成功了:
也可以用以下命令来测试:
fc-match Times
fc-match "Times New Roman"
如果有成功匹配就没有问题,没有成功匹配,也可以重启之后再进行。
安装失败后,重新安装的方法
如果有人是中途安装失败,又想重新安装的,有人提供方法:也是基于下载文件到本地然后进行的
我个人更建议用以下命令,将其完全删除,并再重新安装:
sudo apt-get move ttf-mscorefonts-installer --purge
matplotlib内使用Times New Roman字体
如果你是matplotlib.plot绘图,直接用以下的配置就行,这个配置的弊端是,可能中文字体不能显示了:
import matplotlib.plot as plt
plt.rcParams['font.sans-serif']=['Times New Roman']
如果使用的是其他更高级的命令,我建议这么配置:
import matplotlib.font_manager as font_manager
#这句话rebuild是特别重要,不然会提示找不到文件
font_manager._rebuild()
footpath='/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf'
prop=font_manager.FontProperties(fname=footpath)
matplotlib.rcParams['font.family']=prop.get_name()
matplotlib.use('Agg')
matplotlib.rcParams['svg.fonttype'] = 'path'
这个代码我是综合了其他的解决方法写的:传送门与时光机。我加了svg.fonttype配置,因为我想出svg图,所有对以上代码有看法的朋友,可以讨论一下。
本教程结束
一个科技小白,以小白的态度写教程…☺