情节标签中的直立mu:保留原始刻度字体

时间:2014-03-12 10:35:22

标签: python fonts matplotlib tex rc

我有一个问题,我认为会发生更多。但是,在网上搜索了一段时间后,我一直无法找到问题的解决方案。所以这就是:

对于使用matplotlib.pyplot创建的绘图,我想将SI单位微米计量器合并到我的xlabel中。然而,单位微米计需要是直立的。经过一些摆弄,我实现了所需的xlabel。

我必须生成的代码是:

import matplotlib
import matplotlib.pyplot as plt

matplotlib.rc('text', usetex = True)
params = {'text.latex.preamble': [r'\usepackage{siunitx}', r'\usepackage{cmbright}']}
plt.rcParams.update(params)


fig = plt.figure()
ax = fig.add_subplot(1,1,1)

ax.set_xlabel('$\si{\micro \meter}$', fontsize = 16)
ax.set_ylabel("hi", fontsize = 16)

plt.savefig("test.png")

结果如下所示: enter image description here 微米仪表正如我所希望的那样。然而问题是x和y刻度的字体被改变了。这是因为:

matplotlib.rc('text', usetex = True)

如何将字体值重置为原始值?或者我怎样才能确保在引入tex时不改变字体?

作为参考,我所指的原始值如下所示: enter image description here 除了尝试将字体恢复到原始值之外,我还尝试了将微米计量器整合到我的xlabel中的不同方法。这里出现的问题是我仍然是斜体或它有一个大胆的类型设置。我要找的微米是第一个图中给出的微米。

我希望有人可以帮我解决这个问题。

提前完成

3 个答案:

答案 0 :(得分:2)

我也在努力解决这个问题,即当text.usetex = True时,让刻度标签和轴标签保持一致。我设法找到它不理想的解决方案,但它现在有效。

您需要做的是将字体系列设置为" sans-serif"并添加一个使用sans-serif数学字体的乳胶包(sfmath - 确保它在你的tex路径中!)

import matplotlib
import matplotlib.pyplot as plt

matplotlib.rc('text', usetex = True)
matplotlib.rc('font', **{'family':"sans-serif"})
params = {'text.latex.preamble': [r'\usepackage{siunitx}', 
    r'\usepackage{sfmath}', r'\sisetup{detect-family = true}',
    r'\usepackage{amsmath}']}   
plt.rcParams.update(params)   

fig = plt.figure(figsize = (4,4))
ax = fig.add_subplot(1,1,1)
ax.set_xlabel('$\si{\um} detection$')
ax.set_ylabel(r"$\mu \boldsymbol{\mu}$")
plt.show()                              

此外,我不得不告诉siunitx软件包检测字体系列,我还必须在x标签上添加一些额外的文本,以便检测实际工作(您可以在以后删除此文本和标签仍然可以工作)。

对我来说,这导致: enter image description here 更一般地说,我有以下我的〜/ .matplotlib / matploblibrc文件,用于serif字体:

font.family    : serif 
text.latex.preamble    :   \usepackage{mathptmx}

和sans-serif:

font.family : sans-serif 
text.latex.preamble :   \usepackage{sfmath}

答案 1 :(得分:1)

对我有用的不是usetex,而是使用Unicode:

ax.set_xlabel(u'\u03bc')

将标签设置为单个竖直 mu

加载matplotlib时需要以下设置:

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'cm'
matplotlib.rc('font', family='serif', serif='CMU Serif')
import matplotlib.pyplot as plt

这里我使用Sourceforge的“计算机现代Unicode”字体(如果您希望与LaTeX中的书写字体集及其默认的Computer Modern字体保持一致,则强烈推荐)。

但是任何带有 mu 标志符号的unicode字体都应该有效。实际上,来自CMU Serif的 mu 并不像SIunitx的 mu 那样美观,但它是正确的。

需要重新启动Python才能使其生效。

答案 2 :(得分:0)

我有同样的问题,这解决了它:

matplotlibrc 文件更改

mathtext.default : it

mathtext.default : regular