我有一个问题,我认为会发生更多。但是,在网上搜索了一段时间后,我一直无法找到问题的解决方案。所以这就是:
对于使用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")
结果如下所示: 微米仪表正如我所希望的那样。然而问题是x和y刻度的字体被改变了。这是因为:
matplotlib.rc('text', usetex = True)
如何将字体值重置为原始值?或者我怎样才能确保在引入tex时不改变字体?
作为参考,我所指的原始值如下所示: 除了尝试将字体恢复到原始值之外,我还尝试了将微米计量器整合到我的xlabel中的不同方法。这里出现的问题是我仍然是斜体或它有一个大胆的类型设置。我要找的微米是第一个图中给出的微米。
我希望有人可以帮我解决这个问题。
提前完成
答案 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标签上添加一些额外的文本,以便检测实际工作(您可以在以后删除此文本和标签仍然可以工作)。
对我来说,这导致: 更一般地说,我有以下我的〜/ .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