Python画图时如何调用本地字体
作者:微小冷 发布时间:2023-08-02 08:51:31
matplotlib中的字体文件被封装在font_manager这个子模块中,fontManager.ttflist这个列表涵盖了所有Matplotlib支持的字体。
>>> import matplotlib.pyplot as plt
>>> from matplotlib.font_manager import fontManager
>>> print(fontManager.ttflist[0]) #此为字体文件
<Font 'cmmi10' (cmmi10.ttf) normal normal 400 normal>
Font类中主要有7个基本属性:
‘fname' | ‘name' | ‘size' | ‘stretch' | ‘style' | ‘variant' | ‘weight' |
---|---|---|---|---|---|---|
存储路径 | 字体名 | 尺寸 | 拉伸方式 | 斜粗风格 | 变体 | 粗细 |
若想全局设置字体,可通过更改plt.rcParams来实现,例如设为等线字体
plt.rcParams['font.sans-serif'] = 'DengXian'
plt.text(0,0,'测试',fontsize=20)
plt.show()
效果为
一般来说电脑中内置的字体文件都是数百记,很难逐一展示,所以接下来希望将前100个字体展示在一张图中。
然而rcParams对于并非坐标轴的属性,而是当前作图窗格的属性,若想在局部启用其他字体,可通过plt.text中的fontproperties参数来实现
import numpy as np
from matplotlib.font_manager import FontProperties
x,y = np.indices([10,10]).reshape(2,100)/10
for i in range(100):
font = fontManager.ttflist[i]
plt.text(x[i],y[i],f"测试:{font.name}",
fontsize=10, ha='left', va='bottom',
fontproperties = FontProperties(fname=font.fname))
plt.show()
得到测试字体如图所示
在作图时选择其中支持中文的字体,就不会出现中文乱码问题了。
补充
python实现绘图时候的中文显示,显示微软雅黑字体
1.安装库pip3 install matplotlib
2.向Matplotlib添加中文字体Microsoft YaHei(微软雅黑)
Matplotlib不能默认使用中文字体显示字符的原因只是因为其未包含中文字体文件,所以导入中文字体文件到Matplotlib中即可。
网上下载微软雅黑的ttf文件。Microsoft YaHei.ttf
D:\python\Lib\site-packages\matplotlib\mpl-data(新电脑在C盘python39,装python的地方)
打开这个目录可以看到这个路径下的mpl-data/fonts/ttf/,这个就是Matplotlib引入字体的路径,我们只需要把微软雅黑字体的ttf文件拷贝到其中即可。
3.修改Matplotlib的默认字体配置
mpl-data/matplotlibrc这个文件,这个就是Matplotlib的配置文件。
在这个文件中搜索font.family,其中font.family: sans-serif将#删除即把此行注释打开。则Matplotlib现在的默认字体族是:
font.family : sans-serif
再在这个文件中搜索font.sans-serif,将#删除即把此行注释打开,然后在这个配置的最前面加上Microsoft YaHei,
font.sans-serif : Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
则Matplotlib现在的默认sans-serif字体族会最先使用Microsoft YaHei去展示字体,而这个Microsoft YaHei就可以展示中文字体了。
(axes.unicode_minus : True这一行注释去掉,将true改成false,,,此处用来正常显示负号)(可不做)
4.清除字体缓存(可不做)
为了更好地看到效果,最好可以清楚之前Matplotlib生成的缓存文件,打开~/.matplotlib路径,其中可以看到fontList.json和tex.cache,前者其实就是字体列表的缓存文件,可以删除:rm -rf fontList.json
5.当然,懒办法显示中文字体
每次用时需要设置
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签(动态设置)
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
来源:https://blog.csdn.net/m0_37816922/article/details/121894228
猜你喜欢
- 动态语言与静态语言有很多不同,最大的特性之一就是可以实现动态的对类和实例进行修改,在Python中,我们创建了一个类后可以对实例和类绑定心的
- 您可以使用 ObjectContext 对象提交或放弃一项由 Microsoft Transaction Server (MTS) 管理的事
- PHP _construct() 函数实例函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容:<
- 总结了5个关于css布局的常见问题,并附有解决方法,供参考。float的3像素问题及解决办法当使用float浮动容器后,在IE6下会产生3p
- 方法一:<script language="JavaScript"> <!--
- 最近遇到SQL Server 2005 输入框不能输入中文,在网上查了N久,试验了十几次奏这个法子有用:“把你表中的自动编号列放到最后面”。
- 1.了解oracle外部表 外部表定义:结构被存放在数据字典,而表数据被放在OS文件中的表 作用:在数据库中查询OS文件的数据,还可以将OS
- <P><HTML><HEAD><TITLE>javascriptboy</TITLE&
- 使用ENUM代替字符串类型有时候, 可以通过使用ENUM来代理常规的字符串类型。一个ENUM列能够存储65535个不同的字符串值,MySQL
- 阅读上一篇:FrontPage XP设计教程3——网页的布局 FrontPage XP可以保证用户设计网页与不同的浏览器兼容,它所提供的样式
- 大家都知道在Dreamwerver中可以很方便地实现记录集的分页显示,但是生成的代码的确很庞大,影响了网页的显示速度,看起来条理也不是很清晰
- 看了网站LOGO设计规范的思考的第一部分关于logo设计基础,现在接着来谈谈网络LOGO的设计。四、网络LOGO的设计 古代皇家的纹章,有条
- 本文介绍了保护MySQL数据库中重要数据受外部攻击的六个注意事项,以减少面临的风险。与自动的数据库备份不同,对系统管理员来说,保护数据免受未
- 例如:JSON字符串:var str1 = '{ "name": "cxh", "
- 一、查询条件精确,针对有参数传入情况 二、SQL逻辑执行顺序 FROM-->JOIN-->WHERE-->GROUP--&
- 虽然现在有许多网页制作工具能让您轻松地完成工作,但如果使用HTML则可以得到更大控制权,下面介绍几个小技巧。1.使用语句来控制文字排版比用好
- 1、python-pptx模块简介使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍。这里
- 主要利用了XMLHTTP的一些方法和属性来获取服务器的信息。 以下是全部源代码: &
- 前言优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端友好的关机方式。而执行C
- [PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化,