Як я можу видалити верхню та праву вісь у 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.