Приховування тексту осі у графіках matplotlib


370

Я намагаюся побудувати фігуру без галочок чи цифр на будь-якій з осей (я використовую оси в традиційному розумінні, а не номенклатуру 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. Чи є кращий спосіб зробити вищезазначене? Мій остаточний сюжет складе 4х4 підгруп у фігурі, якщо це доречно.


У мене є сумніви, чи якась відповідь тут насправді відповідає на питання. Мені це виглядає так, що питання задає питання, як позбутися від компенсації . І все ж у всіх відповідях показано різні способи позбавлення від усіх галочок. Якщо питання було замінено на відповіді, можливо, слід відредагувати питання, щоб запитати, на що відповіді пропонують рішення?
ВажливістьBeingErnest

Відповіді:


471

Замість того, щоб ховати кожен елемент, ви можете приховати всю вісь:

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 (проекція = '3d'), ax.axes.get_zaxis (). set_visible (Невірно) дає'Axes3DSubplot' object has no attribute 'get_zaxis'
користувач989762

13
Ця відповідь не дозволяє показувати лінії сітки. Хоча відповідь @saullo castro ...
evan54

Проблема полягає в тому, що коли x_axis встановлено невидимим, сітка з’являється :( Редагувати: Щойно побачила відповідь @Saullo Castro, яка
вирішила

1
@ user989762 У вашому випадку цей метод навіть не буде працювати get_xaxis().set_visible(False). Я думаю, що в цьому випадку matplotlib ініціалізує деякі параметри так, ніби ділянка є 2D. ax.set_zticks([])зробиш те, що хочеш
kon psych

222

Якщо ви хочете приховати лише текст осі, зберігаючи лінії сітки:

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

Виконувати set_visible(False)або set_ticks([])також буде приховано лінії сітки.


4
це видаляє мітки для всіх підсплавів, які поділяють цю вісь: /
endolith

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, поширюються на спільних осях. Тільки це рішення на основі галочки_парами для мене працювало чудово.
Крістіан О'Рейлі

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
це має бути прийнята відповідь
Джейсон 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.