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

3z6pesqy  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(96)

下面的例子:

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块,警告也消失了。
我正在运行elementary OS(基于Ubuntu 22.04.3),显然安装了所有必需的字体和LaTeX包。
这是logging模块和我的系统字体之间的冲突吗?这是logging和LaTeX的问题吗?这里发生了什么?

bd1hkmkf

bd1hkmkf1#

您配置的处理程序本身并不使用字体--它们只是输出文本消息。(在basicConfig()调用之后从代码中调用),但除非配置日志记录,否则它们不会显示。(生成了消息,但没有出现,因为没有日志处理程序输出它们),或者如果删除serif=参数(在这种情况下,事件不会被记录)。
我建议您保留这两个字段,并将格式字符串frmt更改为包括%(name)s%(levelname)s,以便查看消息被记录在何处以及以何种严重性记录。这应该给予一个更好的想法。

相关问题