Matplotlib 中文问题求解

Matplotlib 中文问题求解

在使用Matplotlib绘图时,常常会遇到不支持中文显示的问题,又或者是不支持LaTeX字体的问题。本文将分别针对这两个问题进行解决。

阅读更多:Matplotlib 教程

中文显示问题

首先,我们来看一下中文显示问题。在Matplotlib中,我们可以通过以下方式打开TeX文字支持:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
Python

其中,font.sans-serif表示使用的字体,这里我们使用了常见的中文字体Arial Unicode MS,而axes.unicode_minus表示是否支持负号。如果你的图表中需要包含负号,在设置为True时会将负号替换为其它符号。

接着,我们就可以在Matplotlib中使用中文绘图:

import numpy as np

x = np.array([1,2,3,4,5])
y = np.array([4,1,6,3,8])

plt.plot(x,y)
plt.title('曲线图',fontsize=20)
plt.xlabel('横坐标',fontsize=14)
plt.ylabel('纵坐标',fontsize=14)

plt.show()
Python

上面的代码中,我们使用了中文的标题和坐标轴标签。

如果你的Matplotlib版本较旧,或者无法支持上述中文设置,可以考虑安装较新的版本或者字体。

LaTeX字体问题

第二个问题是关于LaTeX字体的问题。在Matplotlib中,我们可以使用LaTeX字体来美化图表上的文字,但是有时候我们会发现指定了text.usetex=True,但是系统却没有使用LaTeX渲染文本,而是显示成了类似times new roman的普通字体。

造成这一问题的原因很多,下面总结一下常见的解决方案。

安装LaTeX

首先,确保已经安装了LaTeX。Matplotlib需要LaTeX来处理字体渲染和数学公式等问题,所以如果没有安装LaTeX会出现字体无法渲染的问题。

在Mac OS中,LaTeX可以通过Homebrew进行安装:

brew install --cask mactex-no-gui
Python

在Windows中,可以直接从LaTeX官网进行下载和安装工作。

指定LaTeX路径

其次,我们需要指定LaTeX的路径。如果LaTeX没有安装在默认路径下,那么Matplotlib就无法正确访问LaTeX,就不能正确地渲染LaTeX字体。

在Mac OS中,可以通过以下方式进行设置:

import matplotlib as mpl
mpl.rcParams['text.latex.preamble'] = [
    r'\usepackage{fontspec}',
    r'\setmainfont{Helvetica}',
    r'\setsansfont{Helvetica}',
    r'\usepackage[utf8]{inputenc}',
    r'\usepackage[T1]{fontenc}'
]
mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.unicode'] = True
Python

其中,text.latex.preamble表示在每个LaTeX渲染过程中都会运行的一些代码片段。在这里,我们指定了LaTeX的字体为Helvetica,使用utf8编码,同时不需要单独安装中文支持插件。text.usetextext.latex.unicode表示Matplotlib是否应该使用LaTeX来渲染文字。

在Windows中,可以通过以下方式进行设置:

import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = ['Times New Roman']
Python

其中,font.familyfont.serif表示使用的字体族(serif)字体,这里我们使用了较为常见的Times New Roman作为LaTeX字体的替代。

检查是否支持字体

最后,我们需要检查是否系统正确地支持了LaTeX字体。有时候,字体的支持可能与操作系统或者安装路径等相关,就需要我们手动进行一些配置。

在Windows中,可以使用以下代码检查LaTeX字体支持情况:

from matplotlib import font_manager

fonts = font_manager.findSystemFonts()
names = set([font_manager.FontProperties(fname=f).get_name() for f in fonts])

for name in sorted(names):
    print(name)
Python

如果输出的字体中不包含你选定的LaTeX字体,可以考虑手动添加字体。具体方法是将字体文件复制到Matplotlib目录下的fonts/ttf文件夹中,然后重启Python可以让新字体被识别。

在Mac OS中,可以通过访问/usr/local/texlive/2021basic/texmf-dist/fonts/opentype/文件夹寻找LaTeX字体,也可以通过以下代码进行检查:

import subprocess

cmds = ['wget','-qO-','http://localhost:12333/cgi-bin/','?1']
font_list = subprocess.check_output(cmds).split(b'\n')
print(font_list)
Python

其中,这里我们使用了一个HTTP服务来访问系统字体库,把字体输出到了终端上。

总结

到这里,本文介绍了如何在Matplotlib中正确渲染中文和LaTeX字体的方法。总的来说,Matplotlib需要正确设置字体和LaTeX路径,以及保证系统正确支持相关字体,才能正常显示中文和LaTeX字体。相信这里的介绍和示范会对大家解决Matplotlib中的中文显示问题和LaTeX字体问题有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册