Подсюжеты Matplotlib полностью избавляются от меток клещей

Есть ли способ полностью избавиться от меток галочки при создании массива подзаголовков в Matplotlib? В настоящее время мне нужно указать каждый график на основе строки и столбца большего набора данных, которому соответствует график. Я попытался использовать ax.set_xticks ([]) и аналогичную команду оси Y, но безрезультатно.

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


person Palmetto_Girl86    schedule 04.08.2014    source источник
comment
возможный дубликат Удалить xticks в графике библиотеки matplot?   -  person Ben    schedule 04.08.2014
comment
@Ben, я обнаружил это в своих поисках. В моей ситуации это не помогло. Не знаю почему. Я достаточно новичок в программировании, поэтому не уверен, что это из-за того, что у меня есть несколько подсюжетов или что-то в этом роде.   -  person Palmetto_Girl86    schedule 05.08.2014
comment
Вместо того, чтобы предлагать статус моего вопроса как дубликат, есть ли у кого-нибудь предложения, которые можно попробовать? (Извините, что звучит разочарованно, но публикация здесь - это что-то вроде «Радуйся, Мария».)   -  person Palmetto_Girl86    schedule 05.08.2014
comment
Возможный дубликат Скрытие текста оси на графиках matplotlib   -  person Saullo G. P. Castro    schedule 04.06.2017


Ответы (4)


У вас есть правильный метод. Возможно, вы не применяете set_xticks к правильным осям.

Пример:

import matplotlib.pyplot as plt
import numpy as np

ncols = 5
nrows = 3

# create the plots
fig = plt.figure()
axes = [ fig.add_subplot(nrows, ncols, r * ncols + c) for r in range(0, nrows) for c in range(0, ncols) ]

# add some data
for ax in axes:
    ax.plot(np.random.random(10), np.random.random(10), '.')

# remove the x and y ticks
for ax in axes:
    ax.set_xticks([])
    ax.set_yticks([])

Это дает:

введите описание изображения здесь

Обратите внимание, что каждый экземпляр оси хранится в списке (axes), и тогда ими можно легко управлять. Как обычно, есть несколько способов сделать это, это всего лишь пример.

person DrV    schedule 04.08.2014
comment
Однострочным было бы plt.setp(axes, xticks=[], yticks=[]). - person mwaskom; 05.08.2014
comment
Вы также можете использовать NullFormatter - person tacaswell; 05.08.2014
comment
Думаю, мне подойдет какая-то комбинация этих ответов! Спасибо большое. +1 за два подробных ответа с тестируемым кодом. :) - person Palmetto_Girl86; 05.08.2014
comment
Изменить: чтобы убедиться, что этот ответ работает без ошибок, я считаю, что вы должны добавить +1 при индексировании создания подзаголовка: axes = [ fig.add_subplot(nrows, ncols, r * ncols + c + 1) for r in range(0, nrows) for c in range(0, ncols) ] - person user8188120; 10.04.2019
comment
Я не уверен в том, какая версия matplotlib, но простой цикл for по осям больше не будет работать, поскольку теперь они хранятся как двумерный массив, если столбцы и строки не равны 1. Просто нужно иметь в виду . - person L. IJspeert; 25.09.2020
comment
отключение меток-галочек лучше, чем отключение и меток, и меток. - person Krishnaap; 24.07.2021

Еще более краткий, чем ответ @DrV, ремикс комментария @mwaskom, полный и полный однострочный текст, чтобы избавиться от всех осей во всех подзаголовках:

# do some plotting...
plt.subplot(121),plt.imshow(image1)
plt.subplot(122),plt.imshow(image2)
# ....

# one liner to remove *all axes in all subplots*
plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);

Примечание: это должно вызываться перед любыми вызовами plt.show()

person Roy Shilkrot    schedule 04.02.2019
comment
@Roy Этот вариант прекрасен, но он также снимает галочки. Можно ли убрать только ярлыки и оставить галочки? (У меня слишком много подзаговоров, поэтому было бы здорово, если бы была возможность исправить это без необходимости повторять каждый подзаголовок - person Zeineb; 26.07.2020

Команды такие же для подзаголовков

fig = plt.figure()

ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

ax1.plot([1,2])

ax1.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom='off',      # ticks along the bottom edge are off
    top='off',         # ticks along the top edge are off
    labelbottom='off'  # labels along the bottom edge are off)
)

plt.draw()

введите описание изображения здесь

person Ben    schedule 05.08.2014
comment
Это лучше, чем принятый ответ, поскольку он сохраняет любую имеющуюся у вас сетку. Принятый ответ также удалит любую используемую вами x-сетку. например. при использовании стиля ggplot - person Florida Man; 08.11.2018

Вы можете избавиться от отметок x и y подзаголовка по умолчанию, просто запустив следующие коды:

fig, ax = plt.subplots()
ax.xaxis.set_major_locator(plt.NullLocator())
ax.yaxis.set_major_locator(plt.NullLocator())
for i in range(3):
    ax = fig.add_subplot(3, 1, i+1)
    ...

Просто добавив две вышеупомянутые строки сразу после fig, ax = plt.subplots(), вы можете удалить галочки по умолчанию.

person Afi-prd    schedule 31.08.2020