gpt4 book ai didi

python - 如何设置 Matplotlib 以无衬线字体呈现希腊字母

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:40 32 4
gpt4 key购买 nike

我正在使用 Python (2.7) 和 Matplotlib (1.4.3) 生成一些绘图,并且希望绘图中的所有文本都采用无衬线字体。我能够实现的最好的结果是,使用外部 LaTeX 和 sfmath 包,无法在无衬线字体中设置希腊字母。以下 MWE 对此进行了演示:

import matplotlib.pyplot as plt
from matplotlib import rc

rc('text', usetex=True)
rc('text.latex', preamble=r'\usepackage{sfmath}')

fig, ax = plt.subplots()
ax.plot([0,1,2], [2,5,9]) #arbitrary data
ax.set_xlabel(r'$x$ (m)', fontsize=16)
ax.set_ylabel(r'$y = \alpha(x)x^2 - 2\mu$', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16, pad=8)
fig.tight_layout()
fig.show()

[Output of above code (.png)]

我对示例轴标​​签很满意,除了 α 和 μ,它们看起来像默认的 LaTeX serif 字体。

我看过的一些其他问题的答案,涉及更改各种 rc 设置,但不能解决我的问题:

我见过的唯一一个似乎可以实现我想要的效果的示例是 here (比较第一个和最后一个图)但这需要修改 matplotlibrc 文件。这不适合我的目的;无论如何,如果不能根据需要简单地在代码中设置它,我会感到惊讶。

(1) 如何修改上述代码,以便希腊字母以与图中其余文本相同的无衬线字体显示?*

(2) 是否可以使用 Matplotlib 的内置 mathtext 而不是依赖外部 LaTeX 安装来完成所有这些操作?

提前非常感谢您的任何建议。

最佳答案

好吧,在使用 rcParams 一段时间后,我偶然发现了一种实现我想要的目标的方法

  • 不需要外部 LaTeX 安装
  • 不需要手动编辑 matplotlibrc 文件
  • 默认情况下以斜体无衬线字体呈现包括希腊字母的数学文本
  • 使用 \mathrm{} 以非斜体无衬线形式呈现包括希腊字母的数学文本

rcParams 设置更改为:

import matplotlib as mpl
import matploblit.pyplot as plt

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'Arial'
mpl.rcParams['mathtext.fontset'] = 'custom'
mpl.rcParams['mathtext.rm'] = 'sans'
mpl.rcParams['mathtext.it'] = 'sans:italic'
mpl.rcParams['mathtext.default'] = 'it'

fig, ax = plt.subplots()
ax.plot([0,1,2], [2,5,9])
ax.set_xlabel(r'$x$ (m)', fontsize=16)
ax.set_ylabel(r'$y = \alpha$($x$)$x^2-$ $2\mu$', fontsize=16)
ax.set_title(r'Some non-italics: $\mathrm{\alpha, \beta, \gamma}$', fontsize=20)
ax.tick_params(axis='both', which='major', labelsize=16, pad=8)
fig.tight_layout()
fig.show()

[Output of above code (.png)]

请注意,在这个特定示例中,我确实必须使用 y 轴标签来使间距均匀。

关于python - 如何设置 Matplotlib 以无衬线字体呈现希腊字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48454525/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com