【发布时间】:2018-07-05 09:21:25
【问题描述】:
我正在使用 Python (2.7) 和 Matplotlib (1.4.3) 生成一些图,并且希望我的图中的 所有 文本采用无衬线字体。我使用外部 LaTeX 和 sfmath 包所能达到的最好效果,无法在 sans-serif 中设置希腊字母。这在以下 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()
我对示例轴标签感到满意,但 α 和 μ 以默认 LaTeX 衬线字体呈现。
我看过的一些其他问题的答案,涉及更改各种 rc 设置,但不能解决我的问题:
- Sans-serif math with latex in matplotlib
- Upright mu in plot label: retaining original tick fonts
- Typing Greek letters etc. in Python Plots
我见过的唯一一个似乎可以满足我要求的例子是here(比较第一个和最后一个数字),但这需要修改 matplotlibrc 文件。这不适合我的目的;无论如何,如果不能根据需要在代码中简单地设置它,我会感到惊讶。
(1) 如何修改上述代码,使希腊字母以与图中其余文本相同的无衬线字体显示?*
(2) 是否可以使用 Matplotlib 的内置 mathtext 而不是依赖外部 LaTeX 安装来完成所有这些工作?
非常感谢您的任何建议。
【问题讨论】:
-
matplotlib 页面上的example 确实包含无衬线字体的所有内容。也许是时候更新你的 matplotlib 版本了。
-
有趣,谢谢。我很乐意更新我的 matplotlib,问题是我的代码将与拥有上面列出的版本的人共享,并且结果必须仅通过运行代码才能重现(即没有额外/手动修改它们的结尾;它是安全的假设安装了 LaTeX;假设 sfmath 包的安全性稍差一些,这只是我迄今为止发现的最好的折衷方案)。无论如何,我认为这个问题仍然存在。
标签: python matplotlib tex