Я создаю фигуру, где ось x установлена в логарифмическом масштабе base-10, и я хочу, чтобы метки были простыми числами (1, 10, 100) для коротких чисел и сокращались надстрочными индексами, когда они слишком длинные ( $ 10 ^ {3} $, $ 10 ^ {4} $).
Проблема заключается в том, что ограничивающий прямоугольник отличается между обычным текстом и математическим текстом с надстрочным индексом. В частности, между нижней частью текста и нижним краем ограничивающего прямоугольника для обозначения надстрочного индекса имеется дополнительный пробел.
Поэтому, когда я пытаюсь выровнять метки (text + bbox) с set_ha('bottom')
, bboxs выровнены правильно, но тексты не из-за дополнительного пробела в текстовых метках математики.
Проблема, кажется, в некоторой степени связана с этим здесь за исключением того, что в моем случае я имею дело с математическими и нематематическими обозначениями, которые ведут себя по-разному.
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)
Здесь - это рисунок, показывающий, как я хочу, чтобы мои метки были выровнены.
Есть ли способ установить bbox таким образом, чтобы пространство под метками было одинаковым между двумя обозначениями?