Как удалить границу сгенерированного Scipy и Matplotlib начерченной дендрограммы без удаления меток? [Дубликат]

Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

77
задан Michael Kuhn 29 May 2009 в 09:45
поделиться

7 ответов

Это предлагаемое решение Matplotlib 2.0 с официального сайта ЗДЕСЬ :

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()

enter image description here [/g1]

65
ответ дан divenex 25 August 2018 в 03:56
поделиться
  • 1
    Это лучше, чем принятый ответ в более поздних версиях matplotlib. – ffledgling 26 November 2016 в 21:59

(В дополнение к исчерпывающим ответам здесь больше комментария комментария.)


Обратите внимание, что мы можем скрыть каждый из этих трех элементов независимо друг от друга:

  • Чтобы скрыть границу (иначе говоря, «позвоночник»): ax.set_frame_on(False) или ax.spines['top'].set_visible(False)
  • Чтобы скрыть тики: ax.tick_params(top=False)
  • Чтобы скрыть метки : ax.tick_params(labeltop=False)
1
ответ дан Evgeni Sergeev 25 August 2018 в 03:56
поделиться

Если вам не нужны тики и т. д. (например, для построения качественных иллюстраций), вы также можете использовать этот быстрый способ:

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

7
ответ дан nikow 25 August 2018 в 03:56
поделиться
  • 1
    это, кажется, удаляет шипы, но оставляет отметки на месте. Любая идея, как удалить тики? – Rob Young 18 May 2011 в 12:55
  • 2
    @Rob: Вы правы, я фактически использовал другое решение в сценарии, о котором я думал. Я изменил свой ответ, теперь это должно работать, но в целом принятое выше решение лучше. – nikow 18 May 2011 в 19:44

[edit] matplotlib в настоящее время (2013-10) в версии 1.3.0, который включает в себя этот

. Эта способность была фактически добавлена, и вам нужна версия Subversion для нее. Вы можете увидеть пример кода здесь .

Я просто обновляюсь, чтобы сказать, что сейчас есть лучший пример . Тем не менее, нужна версия Subversion, хотя еще не было этой версии.

[edit] Matplotlib 0.99.0 RC1 был только что выпущен и включает эту возможность.

31
ответ дан Oren 25 August 2018 в 03:56
поделиться
  • 1
    Убедитесь, что вы прочитали предупреждение в matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/… о том, что поддержка тикового знака неполна, прежде чем пытаться использовать вышеописанное, например, с помощью повернутых этикеток! – timday 4 November 2011 в 17:06
  • 2
    Пожалуйста, убедитесь, что вы правы с моими изменениями. – tacaswell 5 October 2013 в 04:18
  • 3
    Похоже, это зависит от того, как вы строите ось. Оси, созданные mpl.subplots, нельзя использовать таким образом? – Stefan van der Walt 2 May 2014 в 08:57
  • 4
    Пример ссылки теперь сломан. – mkosmala 16 April 2016 в 17:37

Библиотека 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

1
ответ дан Sander van den Oord 25 August 2018 в 03:56
поделиться

Это гораздо более рудиментарно, но может сделать трюк:

remove_border ()

-4
ответ дан Suneet Dewan 25 August 2018 в 03:56
поделиться

В качестве альтернативы, этот

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; решение, вдохновленное это ).

59
ответ дан timday 25 August 2018 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: