Matplotlib一些LaTeX符号无法随着图形尺寸的增加而缩放

时间:2018-08-20 19:23:26

标签: python matplotlib latex

  

解决方案
  解决方法是使用in this answer中概述的fixcmex。另外,this answer明确指出这是底层LaTeX的问题。

我注意到,当我将图形尺寸增加到某些非常大的尺寸(用于非常大且非主要的显示器)时,并不是所有的LaTeX符号都被正确缩放。

例如

当我使用非常小的图形尺寸(适合默认显示器尺寸)时,一切似乎都很好:

enter image description here

但是,当我增加图形尺寸时,并非所有符号都会缩放。

enter image description here

enter image description here

和丑陋的 enter image description here

某些问题符号包括intfracsqrt(显示样式)和缩放括号。

为什么要提到默认的Ubuntu显示?

我知道Matplotlib的画布存在一些问题,这些问题大于默认的窗口大小,例如Initial plot window ignoring rcParams figure.figsize #10555Add 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)

0 个答案:

没有答案