Как удалить фрейм из matplotlib (pyplot.figure vs matplotlib.figure) (frameon = False Проблема в matplotlib)

Чтобы удалить рамку на рисунке, я пишу

frameon=False 

отлично работает с pyplot.figure , но с matplotlib.Figure это только удаляет серый фон, рамка остается. Кроме того, я хочу, чтобы строки отображались, и все остальное фигура была прозрачной.

с pyplot я могу делать то, что хочу, я хочу сделать это с matplotlib по какой-то давней причине, я бы предпочел не упоминать, чтобы расширить мой вопрос.

  • Функция короткой функции rot13 - Python
  • Многопроцессорность с несколькими аргументами для работы в Python 2.7
  • Сценарий Python для генерации отчета JUnit из другого результата тестирования
  • Как анализировать строки с двухзначным годом?
  • Как писать / обновлять данные в ячейках существующей рабочей книги XLSX с помощью xlsxwriter в python
  • Вопрос о уникальности экземпляра строки в python
  • Чтение и запись определенного содержимого
  • Использование INSERT с помощью базы данных PostgreSQL с использованием Python
  • 5 Solutions collect form web for “Как удалить фрейм из matplotlib (pyplot.figure vs matplotlib.figure) (frameon = False Проблема в matplotlib)”

    Прежде всего, если вы используете savefig , savefig , что он будет переопределять цвет фона рисунка при сохранении, если вы не укажете иное (например, fig.savefig('blah.png', transparent=True) ).

    Однако, чтобы удалить фон осей и фигуры на экране, вам необходимо установить, что ax.patch и fig.patch будут невидимыми.

    Например

     import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(range(10)) for item in [fig, ax]: item.patch.set_visible(False) with open('test.png', 'w') as outfile: fig.canvas.print_png(outfile) 

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

    (Конечно, вы не можете сказать разницу на белом фоне SO, но все прозрачно …)

    Если вы не хотите показывать ничего, кроме строки, также выключите ось, используя ax.axis('off') :

     import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(range(10)) fig.patch.set_visible(False) ax.axis('off') with open('test.png', 'w') as outfile: fig.canvas.print_png(outfile) 

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

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

     import matplotlib.pyplot as plt fig = plt.figure(frameon=False) ax = fig.add_axes([0, 0, 1, 1]) ax.axis('off') ax.plot(range(10)) with open('test.png', 'w') as outfile: fig.canvas.print_png(outfile) 

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

    ax.axis('off') , как указал Джо Кингтон, удаляет все, кроме линии графика.

    Для тех, кто хочет только удалить рамку (границу) и сохранить метки, тикеры и т. Д., Можно сделать это, обратившись к объекту spines на оси. Для оси ax , следующее должно удалять границы со всех четырех сторон:

     ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['bottom'].set_visible(False) ax.spines['left'].set_visible(False) 

    На основе ответа @ peeol вы также можете удалить фрейм, выполнив

     for spine in plt.gca().spines.values(): spine.set_visible(False) 

    Чтобы привести пример (весь образец кода можно найти в конце этого сообщения), скажем, у вас есть такой график, как этот,

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

    вы можете удалить фрейм с помощью команд выше, а затем либо сохранить ярлыки x- и ytick (график теперь показан), либо удалить их также

     plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on') 

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

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

    Вот весь код, необходимый для создания графиков:

     import matplotlib.pyplot as plt import numpy as np plt.figure() xvals = list('ABCDE') yvals = np.array(range(1, 6)) position = np.arange(len(xvals)) mybars = plt.bar(position, yvals, align='center', linewidth=0) plt.xticks(position, xvals) plt.title('My great data') # plt.show() # get rid of the frame for spine in plt.gca().spines.values(): spine.set_visible(False) # plt.show() # remove all the ticks and directly label each bar with respective value plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on') # plt.show() # direct label each bar with Y axis values for bari in mybars: height = bari.get_height() plt.gca().text(bari.get_x() + bari.get_width()/2, bari.get_height()-0.2, str(int(height)), ha='center', color='white', fontsize=15) plt.show() 

    Я использую это:

     from pylab import * axes(frameon = 0) ... show() 
     for spine in plt.gca().spines.values(): spine.set_visible(False) 
    Python - лучший язык программирования в мире.