是否有非数学版本的matplotlib.ticker.LogFormatterSciNotation?

时间:2018-09-11 14:04:11

标签: python matplotlib plot formatting latex

我正在尝试使用pgf_with_latex绘制具有对数y轴的图形,即所有文本格式均由pdflatex完成。在我的matplotlib rc参数中,我定义了要使用的字体。这是我的问题:标准matplotlib.ticker.LogFormatterSciNotation格式化程序使用了数学文本,因此使用了一种数学字体,该字体不适合其余字体(sans-serif)。

如何使用matplotlib.ticker中的格式化程序对y轴标签进行格式化,以便将标签格式化为10的幂和上标幂?更具体地说:如何将这些yticklabels格式化为相同的格式,但使用来自xticklabels的字体?

我已经尝试使用matplotlib.ticker提供的不同格式化程序,但是没有一个以我想要的方式编写指数。

以下是我用以下MWE表示的意思的示例。 example plot

import matplotlib as mpl

mpl.use('pgf')
pgf_with_latex = {
        "pgf.texsystem": "pdflatex",
        "font.family": "sans-serif",
        "text.usetex": False,
        "pgf.preamble": [
            r"\usepackage[utf8x]{inputenc}",
            r"\usepackage{tgheros}",  # TeX Gyre Heros sans serif
            r"\usepackage[T1]{fontenc}"
            ]
        }

mpl.rcParams.update(pgf_with_latex)
import matplotlib.pyplot as plt

fig = plt.figure(figsize=[3, 2])
ax = fig.add_subplot(111)
ax.set_yscale("log")
ax.minorticks_off()
ax.set_xlabel("sans-serif font label")
ax.set_ylabel("math font label")
plt.gca().set_ylim([1, 10000])
plt.gcf().tight_layout()


plt.savefig('{}.pdf'.format("test"))

警告:必须在系统上安装TeX发行版才能运行它。我使用了MikTex 2.9。还有Python 3.6.2和matplotlib 2.1.2。

1 个答案:

答案 0 :(得分:2)

您可以将$_SESSION子类化为LogFormatterExponent来格式化刻度线,其中"10\textsuperscript{x}"是指数。这将不使用数学模式tex,即在文本周围没有x符号,因此将使用在序言中指定的textfont(在这种情况下为没有衬线的字体)。

$

enter image description here