Matplotlib:更改数学字体大小

19

我正在使用matplotlib画一些图形,但在TeX渲染方面遇到了问题。似乎数学字体的x-height比普通的Bitstream Vera Sans小一点。请看以下示例:

x = linspace(0, 30, 300);
y = 0.5*rand(300)+20/(numpy.power(x-15, 2)+4);
xlabel(r'$\omega$ (rad$\cdot$Hz)');
ylabel(r'Intensity$^2$');
title(r'Why is $mathtext$ so much smaller than normal text?');

展示某些随机数据的图表,说明问题。

正如您所看到的,希腊字母和数字尤其明显。理想情况下,我希望能够定义一些缩放因子,使得每个字体大小的数学文本都稍微大一点。是否有简单的方法可以做到这一点?我想在所有地方都使用计算机现代字体。如果可能的话,我也不想编译新的Tex数学字体。

愿意接受的一个解决方案是对希腊字母和数字使用无衬线字体,但由于某种原因,matplotlib忽略了这些的格式:

title('Why does $mat\mathsf{plot}lib$ ignore formatting for $\mathsf{2}$ ($\mathsf{two}), $\mathbf{2}$ ($\mathbf{two}) and $\mathsf{\omega}$?')

标题已更改

我猜这与排版方式的性质有关,但是否有任何方法可以修复它?


您是使用内部数学渲染还是外部的LaTeX安装? - tacaswell
我认为是内部数学渲染。我没有改变它的默认设置。rcParams ['pgf.texsystem'] 解析为“xelatex”,但我不太清楚它用于什么。 - Paul
3个回答

12

来自matplotlib文档

此外,您可以使用\mathdefault{...}或其别名\mathregular{...}以使用mathtext之外正文所使用的字体。这种方法有很多限制,尤其是可用的符号要少得多,但它可以使数学表达式与图中其他文本融合得更好。


很好。显然,您只需添加rcParams ['mathtext.default'] ='regular',即可将文本设置为普通字体。我想我以前尝试过,但可能实现有误。现在它可以正常工作了。 - Paul
查看文档总是一个好主意。 - undefined

3

尝试设置

rcParams['text.usetex'] = True

这将尝试使用外部的LaTeX安装程序,而不是内置的mathtext渲染器。请参见此wiki(尽管有点过时)以及问题#1336上的讨论。

如果您的目标是LaTeX,则另一种选择是使用pstricks。


这非常不理想。它将所有文本渲染设置为由TeX完成(这不是我想要的),这会将字体设置为Computer Modern。它确实引入了无衬线数字,这很好,但希腊字母的格式仍然被忽略。 - Paul
直接的TeX是否支持希腊字母的格式?(也就是说,制作一个.tex文件并查看它是否按预期呈现)。我怀疑您可能还会遇到字体问题,因为并非所有字体都包含所有符号的所有样式的字形。 - tacaswell
我可以稍后检查一下,但我更喜欢使用Myriad Pro字体,它包含希腊字母的字形,但我认为在TeX中没有经过特定编译的支持。我假设更好的方法是在使用时找到一种缩放TeX字体的方式。 - Paul
另一个选择是,如果您要将其转储到LaTeX文档中,则可以使用pstricks稍后进行格式设置。 - tacaswell
非常好的建议。最终,我将使用“常规”选项,因为这些数字不仅适用于Latex文件,但是了解PStricks也很好-因为我可以随时将其添加到我的工作流程中(有一些“使字体看起来漂亮”的模块或类似的东西并导出为EPS)。 - Paul

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接