我已经看到这个问题在这里和那里出现,但还没有找到合适的答案。
在matplotlib中创建绘图时,插入符号和数学函数(如分数,指数等等)的唯一方法是使用TeX格式。但是,默认情况下,TeX格式使用不同的字体并将文本设为斜体。例如,如果我想要一个轴标签来说明以下内容:
光子/平方公分/秒/埃
我必须做以下事情:
ax1.set_ylabel(r'Photons/$cm^2$/s/$\AA$')
这会产生一个非常丑陋的标签,它使用2种不同的字体,并且有点斜体斜体。
如何永久更改 TeX (不是相反)的字体,以便它与matplotlib使用的默认字体匹配?
我已经看到其他解决方案告诉用户通过使用\ mathrm {}手动使图中的所有文本相同,但这是非常繁琐的。我也看到了改变matplotlib默认字体的解决方案,以匹配TeX,这似乎完全倒退了。
答案 0 :(得分:0)
对于排版单位,请使用siunitx
包(使用mode=text
)而不是数学模式。
更新:以上内容仅在您的rc设置中定义text.usetex : True
时才有效。
请注意,您不需要安装TeX,因为matplotlib附带了自己的TeX表达式解析器,布局引擎和字体。
和
常规文本和mathtext可以在同一个字符串中交错。 Mathtext可以使用计算机现代字体(来自(La)TeX),STIX字体(设计为与Times完美融合)或您提供的Unicode字体。可以使用自定义变量
选择mathtext字体mathtext.fontset
读到这一点,听起来设置mathtext.fontset
和matplotlib使用相同的常规字体可以解决问题,如果你不使用TeX。
答案 1 :(得分:0)
事实证明解决方案相当简单,我的同事有解决方案。
如果我使用这行代码创建标题:
fig.suptitle(r'$H_2$ Emission from GJ832')
结果将是“ H 2 来自GJ832的发射”,这是我所遇到的问题的一个例子。但是,事实证明,$$内部的任何内容都转换为数学类型,因此指定了斜体。
如果我们将该行代码更改为以下内容:
fig.suptitle(r'H$_2$ Emission from GJ832')
然后结果是“没有斜体的来自GJ832的H 2 发射”。所以这是一个例子,我们可以将数学类型约束为仅包含文本的数学部分,即创建2的下标。
但是,如果我要将代码更改为以下内容:
fig.suptitle(r'H$_{two}$ Emission from GJ832')
结果将是“H 两个 GJ832的排放”,它再次引入斜体。在这种情况下,对于您必须在美元符号中包含文本(或创建单位符号)的任何情况,您可以通过以下方式轻松删除斜体:
fig.suptitle(r'H$_{\rm two}$ Emission from GJ832')
或在创建符号的情况下:
ax2.set_xlabel(r'Wavelength ($\rm \AA$)')
前者导致“来自GJ832的H 2 排放”
和后者的“波长(A)” 其中A是Angstrom符号。
通过在美元符号中的文本或符号之前调用\ rm,这两个都产生了所需的结果,没有任何斜体。结果没有任何斜体,包括由\ AA创建的Angstrom符号。
虽然这不会改变TeX格式的默认值,但它是解决问题的简单方法,不需要任何新包。无论如何,谢谢罗兰史密斯的建议。我希望这能帮助那些一直在努力解决同一问题的人。