【发布时间】:2019-06-20 15:45:50
【问题描述】:
我正在生成一个图形,其中 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,使两个符号之间标签下方的空间相同?
【问题讨论】:
-
请解释您期望的行为?红色框可以在框的顶部边缘对齐,也可以在底部对齐。您的代码将它们对齐在底部边缘,如果您不使用 for 循环,它们将在顶部边缘对齐。您期望什么第三种行为。请附上一些手绘图来解释问题
-
感谢您回答@Sheldore,我相应地编辑了我的帖子。我认为问题不在于对齐方式,而是我的 bbox 是不同的,无论我使用的是纯文本还是带有上标的数学文本。因此,对齐看起来很奇怪,因为文本没有对齐。也许有一种方法可以对齐 bbox 底部的文本标签?
标签: python matplotlib