首先,它不仅发生在loglog的情况下。刻度总是在没有的情况下导出 \$ .. \$ 。
\$ .. \$
我的解决方法是创建自己的Formatter类:
import matplotlib.pyplot as plt class MyLogFormatterMathtext(plt.LogFormatter): """ Format values for log axis; using ``exponent = log_base(value)`` mark_r: removed \mathdefault escaped $ with \ """ def __call__(self, x, pos=None): 'Return the format for tick val *x* at position *pos*' b = self._base usetex = rcParams['text.usetex'] # only label the decades if x == 0: if usetex: return '$0$' else: return '\$0\$' #'$\mathdefault{0}$' fx = math.log(abs(x)) / math.log(b) is_decade = is_close_to_int(fx) sign_string = '-' if x < 0 else '' # use string formatting of the base if it is not an integer if b % 1 == 0.0: base = '%d' % b else: base = '%s' % b if not is_decade and self.labelOnlyBase: return '' elif not is_decade: if usetex: return (r'\$%s%s^{%.2f}\$') % \ (sign_string, base, fx) else: return (r'\$%s%s^{%.2f}\$') % \ (sign_string, base, fx) else: if usetex: return (r'\$%s%s^{%d}\$') % (sign_string, base, nearest_long(fx)) else: return (r'\$%s%s^{%d}\$') % (sign_string, base, nearest_long(fx))
我编辑了两个案例 usetex==True 和 usetex==False 因为第二个没有产生想要的结果。在我看来,与刻度中的文本相比,标签中的文本被视为不同。 所以我必须使用标准 LogFormatterMathtext 如果 usetex==True 创造“熟悉的外观”。为了导出到svg格式,我使用:
usetex==True
usetex==False
LogFormatterMathtext
majorFormatter = MyLogFormatterMathtext() axes.xaxis.set_major_formatter(majorFormatter)
我更喜欢更通用的解决方案,但这个解决方案可以作为临时解决方案。 随意提出问题或评论此解决方案。