【问题标题】:Matplotlib ticks sans-serif for all plotsMatplotlib 为所有图打勾无衬线
【发布时间】:2018-07-18 15:19:50
【问题描述】:

我正在尝试使用 pgf 在 matplotlib 中实现无衬线轴标签和刻度。我想通过 rcParams 来控制它,所以我让它适用于所有后续的情节。目前,我正在使用

"pgf.rcfonts":False,
"pgf.texsystem": "pdflatex",   
"text.usetex": True,                
"font.family": "sans-serif",

我改编自 mpl 文档。它确实将我在图中的所有文本设置为无衬线字体。但是,数字以衬线字体保存。我希望它们是无衬线的。一旦我强制格式化,它的无衬线字体。有什么办法让它自动做到这一点? 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'))

他们是。

【问题讨论】:

  • 这也是传说中的问题。我将其追溯到 pgf。如果我在 mpl.rc 中添加 sansmath 包,它确实可以在 mpl 中工作。但是,查看 pgf,它并没有强制数字。标签在前面得到 \sffamily,数字被直接解析,因此不明白。
  • 好的,如果我使用手动方式,就会出现另一个问题。它确实将 sans-serif 中的数字解析为我的 tex 文档,但 FormatStrFormatter 在我需要德语时将语言环境重置为美国

标签: python matplotlib formatting


【解决方案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}",
         ]
        }

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

可以通过设置调整默认的ScalarFormatter 以不使用乳胶数学

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

【讨论】:

  • 嗯,使用 .pgf 保存时无论如何都会调用后端 - 仍然无法解决问题。我正处于看不到干净解决方案的地步。 TeX 只是不适用于数学模式下的无衬线字体。有一种方法和包可以强制,但它们会因更复杂的符号而崩溃(就像大多数希腊人一样......)
  • 我用不同的选项扩展了答案。
  • 谢谢,这是一个很好的解决方案。使用 tikz 并设置 \tikzset{every picture/.style={/utils/exec={\sffamily}}} 使文档在任何地方看起来都一样
【解决方案2】:

问题与 LateX 相关。你只需要加载额外的cmbright 包来启用无衬线数学字体。

在类 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}"
        }

【讨论】:

猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2015-12-25
  • 2015-01-24
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多