Matplotlib为所有情节打上Sans-Serif

时间:2018-07-18 15:19:50

标签: python matplotlib formatting

我正在尝试使用pgf在matplotlib中实现sans-serif轴标签和刻度。我想通过rcParams进行控制,因此我可以将其用于所有后续绘图。目前,我正在使用

"pgf.rcfonts":False,
"pgf.texsystem": "pdflatex",   
"text.usetex": True,                
"font.family": "sans-serif",
我从mpl文档改编的

。它确实将我在图中的所有文字都设置为sans-serif。但是,数字以衬线字体保存。我希望他们是无衬线的。一旦我强制使用格式化程序,即无衬线。有什么办法可以使其自动执行此操作? MinEx跟着...

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import FormatStrFormatter

#define style
style = {
        "pgf.rcfonts":False,
        "pgf.texsystem": "pdflatex",   
        "text.usetex": True,                
        "font.family": "sans-serif"
        }
#set
mpl.rcParams.update(style)

#get data
data = np.random.random(100)
#set up plot
f,ax = plt.subplots()
ax.plot(data)
#label something
ax.set_xlabel('Runner')

标签现在没有了。滴答声不是!但是打电话时

ax.xaxis.set_major_formatter(FormatStrFormatter('%d'))

是的。

2 个答案:

答案 0 :(得分:1)

根据pgf texsystem example,您需要使用“ pfg”后端(mpl.use("pgf"))并选择要使用的字体:

style = {
        "pgf.texsystem": "pdflatex",   
        "text.usetex": True,                
        "pgf.preamble": [
         r"\usepackage[utf8x]{inputenc}",
         r"\usepackage[T1]{fontenc}",
         r"\usepackage{cmbright}",
         ]
        }

enter image description here

或者,您可以使用格式化程序,该格式化程序不会将刻度标签格式化为乳胶数学(即不会将它们放入美元符号中)。

可以通过设置来更改默认的ScalarFormatter不使用乳胶数学

ax.xaxis.get_major_formatter()._usetex = False
ax.yaxis.get_major_formatter()._usetex = False

答案 1 :(得分:0)

问题与LateX有关。您只需要加载额外的cmbright软件包即可启用sans-serif数学字体。

在类似Debian的系统上:

sudo apt install texlive-fonts-extra

在Fedora上:

sudo dnf install texlive-cmbright

然后尝试使用以下样式的代码:

style = {   
        "text.usetex": True,                
        "font.family": "sans-serif"
        "text.latex.preamble" : r"\usepackage{cmbright}"
        }