Как выровнять тиковые метки, когда числа имеют верхний индекс в maptlotlib? - PullRequest
1 голос
/ 20 июня 2019

Я создаю фигуру, где ось 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 таким образом, чтобы пространство под метками было одинаковым между двумя обозначениями?

1 Ответ

1 голос
/ 24 июня 2019

Одним из решений является добавление следующего кода в верхней части скрипта, чтобы все тексты с латексом отображались с согласованными ограничивающими рамками:

from matplotlib import rc
rc('text', usetex=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...