matplotlib为什么不在此处使用指定的字体?

时间:2019-04-17 19:49:55

标签: python python-3.x matplotlib

(在Win10上使用Python 3.6.1,在一个virtualenv中,基本上只安装了numpy / pandas / matplotlib,用于处理数字运算的东西。我没有安装Tkinter,而是希望保持这种方式。)< / p>

我有以下测试代码,试图静态呈现MathML文本:

import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plot


def render(mathml):
    plot.clf()
    plot.rc('font', family='monospace', size=72)
    plot.axis('off')
    plot.text(0, 0, f'{mathml}')
    plot.savefig(f'hax.png')


render('$lorem^{ipsum}$')

结果test.png以默认字体(DejaVu Sans Oblique)而不是等宽字体显示文本:

improperly rendered text

明确指定字体(例如family='Courier New')也无效,更改输出格式也无效。文本已正确调整大小,并且没有错误或警告出现-输出只是没有显示正确的字体。

这是怎么回事?我该如何解决?

1 个答案:

答案 0 :(得分:2)

数学字体的选项根据the tutorial

  

DejaVu Sans(默认),DejaVu Serif,Computer Modern字体(来自(La)TeX),STIX字体(用于与Times完美融合)或您提供的Unicode字体

通过默认设置,您可以使用\mathtt获得类似“打字机”的感觉

import matplotlib.pyplot as plt


def render(mathml):
    plt.clf()
    plt.rc('font', size=72)
    plt.axis('off')
    plt.text(0, 0, f'$\\mathtt{{{mathml}}}$')
    plt.show()

render('lorem^{ipsum}')

enter image description here

可以通过mathtext.fontset rc参数在自定义字体集上使用Mathtext。

plt.rcParams["mathtext.fontset"] = "custom"

对于快递新字体,它可能看起来像

import matplotlib.pyplot as plt

def render(mathml):
    plt.clf()
    plt.rc('font', size=72)
    plt.rc('mathtext', fontset="custom", tt="Courier New")
    plt.axis('off')
    plt.text(0, 0, f'$\\mathtt{{{mathml}}}$')
    plt.show()

render('lorem^{ipsum}')

enter image description here