gpt4 book ai didi

python - 在 Matplotlib 中使用 LaTex 渲染轴标签

转载 作者:行者123 更新时间:2023-12-05 07:38:41 29 4
gpt4 key购买 nike

我正在尝试使用 Matplotlib 对绘图上的所有文本进行抗锯齿渲染。我的地 block 导出为 pdf 文件。我在我的 matplotlibrc 文件中允许所有显示 antialiased 的参数:

### MATPLOTLIBRC FORMAT

lines.antialiased : True # render lines in antialiased (no jaggies)
patch.antialiased : True # render patches in antialiased (no jaggies)
font.family : serif
font.weight : normal
font.size : 12.0
font.serif : Computer modern, DejaVu Serif, Bitstream Vera Serif,New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

text.usetex : True # use latex for all text handling. The following fonts
text.latex.preamble : \usepackage{amsmath},\usepackage{pgfplots},\usepackage[T1]{fontenc}

text.antialiased : True # If True (default), the text will be antialiased.
# This only affects the Agg backend.


mathtext.fontset : cm # Should be 'dejavusans' (default),
# 'dejavuserif', 'cm' (Computer Modern), 'stix',
# 'stixsans' or 'custom'


axes.unicode_minus : True # use unicode for the minus symbol
# rather than hyphen. See
# http://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

legend.loc : best
legend.frameon : False # if True, draw the legend on a background patch
legend.framealpha : 0.7 # legend patch transparency
legend.facecolor : inherit # inherit from axes.facecolor; or color spec
legend.edgecolor : 0 # background patch boundary color
legend.fancybox : False # if True, use a rounded box for the
# legend background, else a rectangle

figure.autolayout : True # When True, automatically adjust subplot
# parameters to make the plot fit the figure

下面是一个生成丑陋图形的最小非工作示例:

import numpy as np
import matplotlib.pyplot as plt
plt.plot([1,1],[0,10], linewidth=2, label = r'I am a line')
leg = plt.legend(title=r'$The_{\text{legend}}$ : ' ,ncol=1)
leg._legend_box.align = 'left'
plt.xlabel(r'$D \text{(mm)}$')
plt.ylabel(r'Arbitrary unit')
plt.savefig('example.pdf')
plt.close()

这给出了这个数字:

Link to the pdf file, only valid 10 days

the figure

当放大时,我们清楚地看到文本确实超出了数学模式:

Figure zoomed in on legend

Figure zoomed on axis label

我怎样才能避免这种情况?

还有:

  • 我知道 svg、tikz 和 pgf 导出,但我真的很想拥有一种易于与他人共享的文件类型,

  • 由于错字规则,我无法将所有文本切换到数学模式。在绘图上,变量必须呈现为数学对象,文本必须呈现为文本对象,

  • 在 LaTex 序言中添加 \usepackage{lmodern, mathtools} 以使用 Latin Modern 而不是 Computer Modern 是行不通的。可能是因为 Matplotlib 在离开数学模式时不使用 LaTex 来渲染标签。

最佳答案

根据 ImprotanceOfBeingErnest 的评论,

Usually to get some upright font in mathmode you would use \mathrm{}

我有一个生成图形的代码的工作示例,无需更改 matplotlibrc:

import numpy as np
import matplotlib.pyplot as plt

plt.plot([1,1],[0,10], linewidth=2, label = r'$\mathrm{I \: am \: a \: line}$')
leg = plt.legend(title=r'$The_{\mathrm{legend}}$ : ', ncol=1)
leg._legend_box.align = 'left'
plt.xlabel(r'$D \: \mathrm{(mm)}$')
plt.ylabel(r'$\mathrm{Arbitrary \: unit}$')
plt.savefig('example.pdf')
plt.close()

这对渲染非常有用。但是在代码中非常丑陋,我总是必须在 \mathrm{} 模式下编写,并且每次我想要一个空格时添加 \:

那么,我的问题就变成了:有没有一种方法可以避免使用\mathrm{}模式,仍然有一个好图呢?如果没有,那么我对此很满意。

关于python - 在 Matplotlib 中使用 LaTex 渲染轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778208/

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