Сокрытие текста оси на графиках matplotlib


371

Я пытаюсь построить фигуру без отметок или чисел на любой из осей (я использую оси в традиционном смысле, а не номенклатуру matplotlib!). Проблема, с которой я столкнулся, заключается в том, что matplotlib корректирует метки x (y), вычитая значение N, а затем добавляет N в конце оси.

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

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

Три вещи, которые я хотел бы знать:

  1. Как отключить это поведение в первую очередь (хотя в большинстве случаев это полезно, это не всегда!) Я просмотрел matplotlib.axis.XAxisи не могу найти ничего подходящего

  2. Как я могу заставить N исчезнуть (то есть X.set_visible(False))

  3. В любом случае, есть ли лучший способ сделать это? Мой последний сюжет будет 4x4 на графике, если это уместно.


У меня есть небольшое сомнение, если какой-либо из ответов здесь действительно ответит на вопрос. Мне кажется, вопрос состоит в том, как избавиться от смещения . Все же все ответы показывают различные способы, как избавиться от всех ticklabels. Если вопрос был заменен ответами, может быть, нужно отредактировать вопрос, чтобы спросить, для чего ответы дают решения?
— ImportanceOfBeingErnest

Ответы:


472

Вместо того, чтобы скрывать каждый элемент, вы можете скрыть всю ось:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

Или вы можете установить галочки в пустой список:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

Во втором варианте вы все еще можете использовать plt.xlabel()и plt.ylabel()для добавления меток к осям.


2
Эй, Офри - это здорово, спасибо, но теперь (просто чтобы быть неловким), что произойдет, если я захочу добавить xlabel ()? Кроме ручного размещения текстового виджета.
— Дэйв

5
Как вы можете расширить этот пример до 3d? ax = plt.gca (projection = '3d'), ax.axes.get_zaxis (). set_visible (False) дает'Axes3DSubplot' object has no attribute 'get_zaxis'
— user989762

13
Этот ответ не позволяет показывать линии сетки. Ответ @saullo Castro делает, хотя ...
— evan54

Проблема в том, что когда x_axis установлен в невидимое, сетка исчезает :( Редактировать: только что видел ответ @Saullo Castro, который исправил проблему.
— Shailen

1
@ user989762 В вашем случае этот метод не будет работать, даже не get_xaxis().set_visible(False). Я думаю, что matplotlib в этом случае инициализирует некоторые параметры, как если бы график был 2D. ax.set_zticks([])будет делать то, что вы хотите
— Кон Псих

222

Если вы хотите скрыть только текст оси, сохраняя линии сетки:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

Делать set_visible(False)или set_ticks([])также будет скрывать линии сетки.


4
это удаляет ярлыки для всех сюжетных , что доля эта ось: /
— эндолиты

136

Если вы похожи на меня и не всегда извлекаете оси ax, при построении фигуры, простое решение было бы сделать

plt.xticks([])
plt.yticks([])

56

В некотором роде старый поток, но, похоже, это более быстрый метод с использованием последней версии matplotlib:

установить основной форматер для оси X

ax.xaxis.set_major_formatter(plt.NullFormatter())

1
Что делать, если вы хотите сделать это только для одного тика?
— tommy.carstensen

5
Да, это полезно, чтобы скрывать только метки, потому что .set_xticks ([]) также удаляет сами галочки.
— zbyszek

49

На самом деле я не смог отрисовать изображение без границ или данных осей на основе какого-либо фрагмента кода (даже того, который был принят в ответе). Прочитав некоторую документацию по API, я нашел этот код для рендеринга своего изображения.

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

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


1
Когда оси совместно используются, решения, основанные на set_ticklabels, распространяются на совместно используемые оси. Только это решение, основанное на tick_params, работало нормально для меня.
— Кристиан О'Рейли,

39

Я обозначил эту цифру цветом, чтобы облегчить процесс.

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

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

Вы можете иметь полный контроль над рисунком, используя эти команды, чтобы завершить ответ, я добавил также контроль над сплайнами:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)

ax.set_xticklabels([])и ax.set_xticks([])не работал для меня, но ax.axes.get_xaxis().set_visible(False)работал.
— Хомеро Эсмеральдо

2
это должен быть принятый ответ
— Jason S

6

При использовании объектно-ориентированного API у Axesобъекта есть два полезных метода для удаления текста оси, set_xticklabels()и set_xticks().

Скажем, вы создаете сюжет, используя

fig, ax = plt.subplots(1)
ax.plot(x, y)

Если вы просто хотите удалить метки, вы можете использовать

ax.set_xticklabels([])

или полностью удалить галочки, вы можете использовать

ax.set_xticks([])

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


2

Одним из трюков может быть установка белого цвета для ярлыков, чтобы скрыть это!

plt.xticks(color='w')
plt.yticks(color='w')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.