Как удалить верхнюю и правую оси в matplotlib?


134

Вместо стандартного стиля оси «в рамке» я хочу иметь только левую и нижнюю оси, то есть:

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

Это должно быть легко, но я не могу найти необходимые параметры в документации.

Ответы:


154

Это предлагаемое решение 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.
— Ffledgling

3
Дополнительный вопрос для новичков: где можно найти этот ответ на основе документа API Matplotlib? Если я пойду туда: 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/… о неполной поддержке галочки, прежде чем пытаться использовать вышеуказанное, например, с повернутыми этикетками!
— Timday 04

Похоже, это зависит от того, как вы строите ось. Оси, созданные с помощью, 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.