【Python基础】matplotlib字体设置看这一篇就够了

本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

matplotlib作为数据可视化的利器,被广泛用于数据分析之中,但不太友好的是matplotlib中书写非英文文字内容时,如果不事先对字体进行相关设置,会发现绘制出的诸如「中文」等均显示为「方块乱码」,而今天的内容,我们就来小小总结一下matplotlib中字体设置的常用技巧。

图1

2 在matplotlib中设置字体的常用方法

matplotlib中设置字体的方法按作用范围可分为全局设置与临时设置:

2.1 在matplotlib中设置全局字体

我们在默认状态下使用matplotlib书写中文内容时之所以显示出乱码,是因为matplotlib默认的字体为英文字体,导致许多unicode编码的语言文字都无法书写。

而全局设置字体的方式,指的是我们可以通过修改本地配置文件或在程序开头设置字体相关参数,从而人为地为当前kernel下的matplotlib规定使用指定的字体,主要有以下几种情况:

  • 「使用系统自带字体」

所谓「系统自带字体」,譬如对于windows,其系统盘Windows/Fonts下的诸多已安装到系统中的字体:

图2

当然,matplotlib可以检测到的字体不止上述的这些,我们可以通过下列方式查看matplotlib中默认已经识别到的所有可用字体:

import matplotlib.pyplot as plt
from matplotlib import font_manager

for font in font_manager.fontManager.ttflist:
    # 查看字体名以及对应的字体文件名
    print(font.name, '-', font.fname)
图3

其中在font_manager.fontManager.ttflist中迭代到的每个对象,其name属性即为我们下面设置字体要使用到的名称,以「华文琥珀」为例,我们先查看到其对应的字体文件名称:

图4

接着我们写两行程序来找到其对应的名称:

图5

接着按照plt.rcParams['font.sans-serif'] = 字体名称的格式设置即可:

图6

可以看到这时我们全局所有文字都变成「华文琥珀」

  • 「使用任意的字体」

如果你想要的字体不在系统默认字体中,且你只想临时使用不想安装到系统字体中,则可以利用font_manager.fontManager.addfont()来传入字体文件路径临时注册一个字体,以我下载的三方字体文件MaShanZheng-Regular.ttf为例:

图7 图8

2.2 在matplotlib中设置局部字体

而如果你只是想要在数据可视化作品中的部分元素譬如文字标注中临时使用一下字体,则可以利用font_manager.FontProperties()将字体路径作为fname参数传入,并传入到对应matplotlib绘图API相应参数中,以text()为例:

图9

而刻度标签则可以参考下面的方式:

图10

以上就是本文的全部内容,欢迎在评论区与我进行讨论~


往期精彩回顾



适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
获取本站知识星球优惠券,复制链接直接打开:
https://t.zsxq.com/qFiUFMV
本站qq群704220115。

加入微信群请扫码:

  • 53
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要对一篇中文文章进行词频统计并绘制词云图,可以使用Python中的jieba和wordcloud库。步骤如下: 1. 安装jieba和wordcloud库。在命令行中输入以下命令: ``` pip install jieba pip install wordcloud ``` 2. 导入所需库: ```python import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt from PIL import Image import numpy as np ``` 3. 打开中文文章并读取: ```python with open('article.txt', 'r', encoding='utf-8') as f: article = f.read() ``` 4. 使用jieba分词,并统计词频: ```python words = jieba.lcut(article) # 使用精确模式分词 freq = {} for word in words: if len(word) > 1: # 只统计长度大于1的词语 freq[word] = freq.get(word, 0) + 1 ``` 5. 生成词云图: ```python mask = np.array(Image.open('mask.png')) # 打开遮罩图片 wc = WordCloud(background_color='white', font_path='msyh.ttc', mask=mask, max_words=200, max_font_size=100, random_state=42) wc.generate_from_frequencies(freq) # 根据词频生成词云图 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 其中,mask参数指定了词云图的形状,max_words和max_font_size分别指定了最多显示的词数和词的最大字号,font_path指定了使用的字体。 完整代码如下: ```python import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt from PIL import Image import numpy as np with open('article.txt', 'r', encoding='utf-8') as f: article = f.read() words = jieba.lcut(article) freq = {} for word in words: if len(word) > 1: freq[word] = freq.get(word, 0) + 1 mask = np.array(Image.open('mask.png')) wc = WordCloud(background_color='white', font_path='msyh.ttc', mask=mask, max_words=200, max_font_size=100, random_state=42) wc.generate_from_frequencies(freq) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 其中,article.txt是要处理的文章,mask.png是词云图的形状图片,msyh.ttc是字体文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值