Як я можу видалити верхню та праву вісь у matplotlib?


133

Замість типового "коробкового" стилю осі я хочу мати лише ліву та нижню осі, тобто:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

Це повинно бути простим, але я не можу знайти потрібні варіанти в документах.

Відповіді:


153

Це запропоноване рішення Matplotlib 3 з офіційного веб-сайту ТУТ :

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()

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


2
Це краще, ніж прийнята відповідь у новіших версіях matplotlib.
вівторок

3
Додаткове запитання для початківців: де ви можете знайти цю відповідь на основі документа Matplotlib API? Якщо я заходжу туди: matplotlib.org/api/axes_api.html Я не бачу посилання на spineоб'єкт, і я б не здогадався про це ключове слово.
Ерік

63

Як варіант, це

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()

Схоже, досягти такого ж ефекту на осі, не втрачаючи обертової підтримки мітки.

(Matplotlib 1.0.1; рішення, натхнене цим ).


33

[редагувати] matplotlib зараз (2013-10) на версії 1.3.0, яка включає це

Ця здатність насправді була лише додана, і вам потрібна версія Subversion. Ви можете подивитися приклад коду тут .

Я просто оновлююся, щоб сказати, що зараз є кращий приклад в Інтернеті. Досі потрібна версія Subversion, хоча з цим ще не було випусків.

[редагувати] Matplotlib 0.99.0 RC1 щойно був випущений і включає цю можливість.


Переконайтеся, що ви прочитали попередження на сайті matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/… про неповну підтримку галочки перед тим, як спробувати використати вищезазначене, наприклад, наприклад, повернутими мітками!
тайм

Схоже, це залежить від того, як ви будуєте вісь. Оси, що генеруються, mpl.subplotsне можна використовувати таким чином?
Штефан ван дер Уолт

8
Приклад посилання зараз розірвано.
mkosmala

10

(Це більше коментар до розширення, крім вичерпних відповідей тут.)


Зауважте, що ми можемо приховати кожен із цих трьох елементів незалежно один від одного:

  • Щоб приховати кордон (він же «хребет»): ax.set_frame_on(False)абоax.spines['top'].set_visible(False)

  • Щоб приховати кліщів: ax.tick_params(top=False)

  • Щоб приховати мітки: ax.tick_params(labeltop=False)


приємний підсумок можливостей. +1
loved.by.Jesus

9

Якщо вам не потрібні кліщі та інше (наприклад, для складання якісних ілюстрацій), ви також можете скористатися цим швидким вирішенням:

Зробіть вісь невидимою (наприклад, з plt.gca().axison = False), а потім намалюйте їх вручну plt.arrow.


1
це, здається, видаляє колючки, але залишає галочки на місці. Будь-яка ідея, як видалити кліщів також?
Роб Янг

2
@Rob: Ви маєте рацію, я фактично використовував інше рішення в сценарії, про який я думав. Я змінив свою відповідь, зараз це має працювати, але загалом прийняте рішення вище.
nikow

9

Бібліотека Seaborn має вбудовану функцію despine ().

Просто додайте:

import seaborn as sns

Тепер створіть свій графік. І додайте в кінці:

sns.despine()

Якщо ви подивитеся на деякі значення параметрів за замовчуванням функції, вона видаляє верхній і правий відділ хребта і зберігає нижній і лівий хребет:

sns.despine(top=True, right=True, left=False, bottom=False)

Перегляньте подальшу документацію тут: https://seaborn.pydata.org/generated/seaborn.despine.html


7

Якщо вам потрібно видалити його з усіх своїх сюжетів, ви можете видалити колючки в налаштуваннях стилю (аркуш стилів або rcParams). Наприклад:

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False

Якщо ви хочете видалити всі колючки:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.