Сокрытие текста оси на графиках matplotlib - PullRequest
301 голосов
/ 01 февраля 2010

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

Ответы [ 8 ]

387 голосов
/ 01 февраля 2010

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

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() для добавления меток к осям.

190 голосов
/ 26 мая 2013

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

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

Выполнение set_visible(False) или set_ticks([]) также скроет линии сетки.

100 голосов
/ 29 ноября 2016

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

plt.xticks([])
plt.yticks([])
49 голосов
/ 28 января 2015

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

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

ax.xaxis.set_major_formatter(plt.NullFormatter())
29 голосов
/ 12 ноября 2016

На самом деле я не смог отобразить изображение без границ или данных осей, основываясь на каких-либо фрагментах кода (даже на том, который был принят в ответе). Прочитав некоторую документацию по 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, чтобы в основном отключить любую дополнительную информацию, которая может быть визуализирована, и у меня есть идеальный график в моем выходном файле.

10 голосов
/ 19 февраля 2019

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

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

enter image description here

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

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)
5 голосов
/ 15 февраля 2019

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

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

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

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

ax.set_xticklabels([])

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

ax.set_xticks([])

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

1 голос
/ 27 октября 2018

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

plt.xticks(color='w')
plt.yticks(color='w')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...