Непонятное поведение для yticks matplotlib.pyplot ([]) - PullRequest
2 голосов
/ 30 марта 2020

Я хочу отключить автоматически генерируемые тиковые метки pyplot в пользу моих собственных меток. Когда я подавляю метки y-тика, используя pyplot.yticks([]) в следующем скрипте Python,

from matplotlib import pyplot as plt

num_points = 10
data       = [i for i in range(num_points)]
fig        = plt.figure()
ax         = plt.subplot(1,1,1)

ax.plot(data)
ax.set_yscale('log')
plt.yticks([])
plt.text(1, 7, '10 data points')

plt.show()

pyplot подавляет метки y-тика, как требуется:

10 points log

Но когда num_points меньше десяти, pyplot игнорирует pyplot.yticks([]), вставляет автоматически сгенерированные метки и выдает

9 points log

Когда я предоставляю свои собственные метки тиков, предоставляя список значений и список меток, через plt.yticks(values_list, labels_list), pyplot.yticks() принимает мои метки, но это все еще dr aws это автоматически генерируемые метки тиков, которые перезаписывают мои метки.

Если я изменяю график журнала из девяти пунктов на линейный график, опуская оператор ax.set_yscale('log'), pyplot делает не автоматически генерировать рисование метки галочек:

9 points linear

Проблема, по-видимому, связана с участками журнала с количеством точек менее десяти. Как подавить автоматически генерируемые метки тиков на графиках журналов, имеющих менее десяти баллов?

1 Ответ

0 голосов
/ 30 марта 2020

При работе с осью журнала по умолчанию отображаются не только основные, но и второстепенные тики. Вы можете отключить их отдельно. Обратите внимание, что когда очень мало основных тиков, второстепенные тики также могут получить метку.

Также обратите внимание, что обычно не стоит иметь нулевые значения в логарифмическом масштабе. Поскольку log(0) - минус бесконечность, matplotlib должен сделать некоторое предположение о желаемом расстоянии между тиками.

from matplotlib import pyplot as plt
from matplotlib import ticker

num_points = 10
data       = [i+2 for i in range(num_points)]
fig        = plt.figure()
ax         = plt.subplot(1,1,1)

ax.plot(data)
ax.set_yscale('log')
ax.text(1, 7, '10 data points')
ax.yaxis.set_major_locator(ticker.NullLocator())
ax.yaxis.set_minor_locator(ticker.NullLocator())

plt.show()

На рисунке основные тики выделены синим, а второстепенные тики красным. Поскольку в этом примере есть только один главный тик, некоторые из второстепенных тиков также получили ярлык. enter image description here

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