当maptlotlib中的数字带有上标时,如何对齐刻度标签?

时间:2019-06-20 15:45:50

标签: python matplotlib

我正在生成一个图形,其中x轴设置为以10为底的对数刻度,我希望标签为短数字为纯数字(1、10、100),而在太长的情况下则以上标缩写( $ 10 ^ {3} $,$ 10 ^ {4} $)。

问题在于纯文本和带上标的数学文本之间的边界框有所不同,特别是在文本底部和边界框底部边缘之间有多余的空格用于上标符号。

因此,当我尝试将标签(文本+ bbox)与set_ha('bottom')对齐时,bbox正确对齐了,但文本并不是因为数学文本标签中有多余的空白。

这个问题似乎与此here有关,除了在我的情况下,我所处理的数学和非数学符号的行为有所不同。

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

def setup(ax):
    """Only show bottom axis"""
    ax.spines['top'].set_visible(False)
    ax.spines['left'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.yaxis.set_major_locator(ticker.NullLocator())

fig = plt.figure(figsize=(8, 1))
ax = fig.add_subplot(1, 1, 1)

setup(ax)

ticklabels = [r'0', r'10', r'$100$', r'$10^3$', r'$10^4$', r'$10^5$']
ax.set_xticklabels(ticklabels, fontdict=dict(fontsize=11))

# align and move labels
for label in ax.xaxis.get_majorticklabels():
    # uncomment to see the extra white space
    # below labels with superscript notation
    # label.set_bbox(dict(edgecolor='red', facecolor='none', pad=0))
    label.set_va('bottom')
    label.set_y(-.14)

Here是显示我如何对齐标签的图。

有没有一种方法可以设置bbox,使两个注释之间的标签下方的空间相同?

1 个答案:

答案 0 :(得分:1)

一种解决方案是在脚本顶部添加以下代码,以使所有带有乳胶的文本都具有一致的边框:

from matplotlib import rc
rc('text', usetex=True)
相关问题