日志记录模块、Latex 和 matplotlib 之间的冲突

问题描述 投票:0回答:1

以下示例:

import logging
import matplotlib.pyplot as plt
import matplotlib.pyplot as mpl

mpl.rc('font', family='serif', serif="DejaVu Serif")
mpl.rc('text', usetex=True)

# Set up logging module
level = logging.INFO
frmt = '%(message)s'
handlers = [
    logging.FileHandler("test.log", mode='a'),
    logging.StreamHandler()]
logging.basicConfig(level=level, format=frmt, handlers=handlers)

fig = plt.figure()
plt.scatter(.5, .5)
plt.xlabel("test label")
plt.savefig("del.png")

生成数十个警告:

No LaTeX-compatible font found for the serif fontfamily in rcParams. Using default.

如果我注释掉

serif="DejaVu Serif"
参数,所有这些都会消失,并且输出显然保持完全相同。我还可以保留该参数并注释掉
logging
块,警告也会消失。

我正在运行基本操作系统(基于 Ubuntu 22.04.3),显然安装了所有必需的字体和 LaTeX 软件包。

这是

logging
模块和我的系统字体之间的冲突吗?这是
logging
和 LaTeX 的问题吗?这是怎么回事?

python matplotlib logging latex
1个回答
0
投票

您配置的处理程序不使用字体本身 - 它们只是输出文本消息。我的猜测是

matplotlib
或其他一些库正在记录消息(在
basicConfig()
调用之后从您的代码调用,但除非您配置日志记录,否则它们不会显示。这可以解释为什么如果您删除消息,消息就会消失日志记录(会生成消息,但不会出现,因为没有日志处理程序来输出它们),或者删除
serif=
参数(在这种情况下不会记录事件)。

我建议您保留两者并更改格式字符串

frmt
以包含
%(name)s
%(levelname)s
,以便查看消息记录的位置以及严重程度。这应该可以更好地了解正在发生的事情。

© www.soinside.com 2019 - 2024. All rights reserved.