解决方案
解决方法是使用in this answer中概述的fixcmex
。另外,this answer明确指出这是底层LaTeX的问题。
我注意到,当我将图形尺寸增加到某些非常大的尺寸(用于非常大且非主要的显示器)时,并不是所有的LaTeX符号都被正确缩放。
例如
当我使用非常小的图形尺寸(适合默认显示器尺寸)时,一切似乎都很好:
但是,当我增加图形尺寸时,并非所有符号都会缩放。
某些问题符号包括int
,frac
,sqrt
(显示样式)和缩放括号。
为什么要提到默认的Ubuntu显示?
我知道Matplotlib的画布存在一些问题,这些问题大于默认的窗口大小,例如Initial plot window ignoring rcParams figure.figsize #10555和Add scrollbars when needed to preserve specified figure size #7338)
代码:
在Ubuntu 16.04上使用虚拟环境python 2.7.12和matplotlib 2.2.3和TkAgg后端。 (不完全是MWE,但我希望它足够接近)。
import matplotlib as mpl
plt_style = 1 # Toggle this to see the difference
if plt_style == 0:
rc_fonts = {
"text.usetex": True,
"font.size": 30,
'mathtext.default': 'regular',
'axes.titlesize': 33,
"axes.labelsize": 33,
"legend.fontsize": 30,
"xtick.labelsize": 30,
"ytick.labelsize": 30,
'figure.titlesize': 33,
'figure.figsize': (15,9.3),
'text.latex.preamble': [r'\usepackage{amsmath,amssymb,bm,physics,lmodern}'],
"font.family": "serif",
"font.serif": "computer modern roman",
}
elif plt_style == 1:
rc_fonts = {
"text.usetex": True,
"font.size": 50,
'mathtext.default': 'regular',
'axes.titlesize': 55,
"axes.labelsize": 55,
"legend.fontsize": 50,
"xtick.labelsize": 50,
"ytick.labelsize": 50,
'figure.titlesize': 55,
'figure.figsize': (25, 16.5), # 15, 9.3
'text.latex.preamble': [r'\usepackage{amsmath,amssymb,bm,fontenc,physics,lmodern,nicefrac}'],
"font.family": "serif",
"font.serif": "computer modern roman",
}
elif plt_style == 2:
rc_fonts = {
"text.usetex": True,
"font.size": 15,
'mathtext.default': 'regular',
'axes.titlesize': 16,
"axes.labelsize": 16,
"legend.fontsize": 15,
"xtick.labelsize": 15,
"ytick.labelsize": 15,
'figure.titlesize': 16,
'figure.figsize': (7.5,4.65),
'text.latex.preamble': [r'\usepackage{amsmath,amssymb,bm,physics,lmodern}'],
"font.family": "serif",
"font.serif": "computer modern roman",
}
mpl.rcParams.update(rc_fonts)
import matplotlib.pylab as plt
import pandas as pd
import numpy as np
# e.g. An example plot
x = np.linspace(-3, 3, 1000)
y1 = np.exp(-0.5*x**2)/np.sqrt(2.0*np.pi)
y2 = np.sin(x)**2.0*np.exp(-0.5*x**2)/np.sqrt(2.0*np.pi)
plt.clf() # I usually clear the current figure.
plt.plot(x, y1, 'k-', label='Standard Gaussian')
plt.plot(x, y2, 'r-', label='Modified Gaussian')
plt.legend(loc='upper left', frameon=False)
plt.title('Gaussian functions', y=1.02) # A small vertical offset is usually nice.
plt.xlabel(r'$x$')
plt.ylabel(r'$f(x)$')
plt.ylim((0, 0.5))
plt.xlim((min(x), max(x)))
plt.gca().text(0.98, 0.98, r'$\displaystyle\int_\mathbb{R}^{} \sqrt{\dfrac{1}{\sqrt{2\pi\sigma}} \exp(-\dfrac{x^2}{2\sigma^2})} \dd{x} = 1 $', transform=plt.gca().transAxes, horizontalalignment='right', verticalalignment='top')
# plt.savefig('figures/gaussian_{}.pdf'.format(plt_style), format='pdf', bbox_inches='tight', transparent=True)