Избирательно удалить метки (основные и / или второстепенные) с логарифмической оси - PullRequest
0 голосов
/ 15 апреля 2019

Рассмотрим следующий пример:

import matplotlib
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.set_xscale('log')
ax.set_yscale('log')

ax.set_xlim([2e-2, 2e-1])
ax.set_ylim([2e+1, 2e+3])

ax.plot([0.02, 0.1, 0.2], [20, 1000, 2000])

ax.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.get_xaxis().set_minor_formatter(matplotlib.ticker.ScalarFormatter())

plt.show()

, что дает

enter image description here

Теперь я хочу выборочно удалить / изменить тиковые метки с оси x, чтобы сохранить только ['0.02', '0.10', '0.20'], сохраняя тиковые метки. Как мне это сделать?

Редактировать

Стратегия, которой я изначально хотел следовать, похоже, страдает ошибкой. Я считал это

fig.canvas.draw()

labels = [item.get_text() for item in ax.get_xticklabels()]

# ...

ax.set_xticklabels(labels)

Но на моем Mac он печатает только

>>> print(labels)
['', '', '', '', '']

1 Ответ

1 голос
/ 15 апреля 2019

Здесь вы хотите, чтобы тики были кратны 1 и 2 целочисленных степеней логарифмической основы (10).Это можно сделать с помощью matplotlib.ticker.LogLocator(subs=(1,2,)).Затем вы можете использовать NullLocator() для отключения второстепенных меток.

import matplotlib
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.set_xscale('log')
ax.set_yscale('log')

ax.set_xlim([2e-2, 2e-1])
ax.set_ylim([2e+1, 2e+3])

ax.plot([0.02, 0.1, 0.2], [20, 1000, 2000])

ax.xaxis.set_major_locator(matplotlib.ticker.LogLocator(subs=(1,2,)))
ax.xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.xaxis.set_minor_formatter(matplotlib.ticker.NullFormatter())

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...