Matplotlib,使用乳胶的Consistent字体

ncR*_*ert 45 matplotlib

我的问题是我想在某些情节中使用乳胶标题,而在其他情节则不使用乳胶.现在,matplotlib有两种不同的默认字体用于Latex标题和非Latex标题,我希望这两种字体保持一致.是否有RC设置我必须更改,这将自动允许?

我使用以下代码生成一个图:

import numpy as np
from matplotlib import pyplot as plt

tmpData = np.random.random( 300 )

##Create a plot with a tex title
ax = plt.subplot(211)
plt.plot(np.arange(300), tmpData)
plt.title(r'$W_y(\tau, j=3)$')
plt.setp(ax.get_xticklabels(), visible = False)

##Create another plot without a tex title
plt.subplot(212)
plt.plot(np.arange(300), tmpData )
plt.title(r'Some random numbers')
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是我所说的不一致.轴刻度标签相对于标题看起来很薄:

lin*_*urn 40

要使tex-style/mathtext文本看起来像常规文本,您需要将mathtext字体设置为Bitstream Vera Sans,

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'custom'
matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans'
matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic'
matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')
Run Code Online (Sandbox Code Playgroud)

如果您希望常规文本看起来像mathtext文本,则可以将所有内容更改为Stix.这会影响标签,标题,刻度等.

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'stix'
matplotlib.rcParams['font.family'] = 'STIXGeneral'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')
Run Code Online (Sandbox Code Playgroud)

基本思想是你需要将regular和fontstext字体设置为相同,并且这样做的方法有点模糊.您可以看到自定义字体列表,

sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
Run Code Online (Sandbox Code Playgroud)

正如其他人提到的,你也可以通过在rcParams中设置text.usetex让Latex为你渲染一切,但这很慢而且不是完全必要的.

  • 不错的工作!使用“ stix”选项可以正常工作;但是,最好的LaTeX结果是将“ matplotlib.rcParams ['mathtext.fontset'] ='stix'`更改为'matplotlib.rcParams ['mathtext.fontset'] ='cm'。这是LaTeX的字体[[计算机现代](https://en.wikipedia.org/wiki/Computer_Modern)”。最终将系列更改为“ matplotlib.rcParams ['font.family'] ='cmu serif'`可行,但是在我的情况下,我的减号有问题,因此我将'stix'更改为'cm' `,但是我离开了''STIXGeneral'`,看起来不错;) (2认同)

nye*_*e17 14

编辑

如果你想在matplotlib中更改LaTeX使用的字体,请查看此页面

http://matplotlib.sourceforge.net/users/usetex.html

其中一个例子就是

from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
## for Palatino and other serif fonts use:
#rc('font',**{'family':'serif','serif':['Palatino']})
rc('text', usetex=True)
Run Code Online (Sandbox Code Playgroud)

只需选择你最喜欢的!

如果你想要一个粗体字,你可以尝试 \mathbf

plt.title(r'$\mathbf{W_y(\tau, j=3)}$')
Run Code Online (Sandbox Code Playgroud)

编辑2

以下将为您设置粗体字体默认值

font = {'family' : 'monospace',
        'weight' : 'bold',
        'size'   : 22}

rc('font', **font)
Run Code Online (Sandbox Code Playgroud)

  • 是否有一种自动方式使轴刻度标签默认为粗体?我想让标签更高,更宽,个性更厚. (2认同)