Включить вывод из% matplotlib backend в качестве SVG в ipynb

Этот ответ из нескольких лет назад показывает, как вы можете сделать jupyter notebook создавать графики как svg. Решение состоит в том, чтобы сообщить InlineBackend использовать svg как вывод.

 import matplotlib.pyplot as plt %matplotlib inline %config InlineBackend.figure_format = 'svg' plt.plot(...) 

Это приведет к тому, что все изображения будут в формате svg внутри ноутбука, а также в созданном файле ipynb; файл будет иметь строку типа

 "data": { "image/svg+xml": [ "<?xml ..... 

в этом.

Проблема в том, что это не работает, если %matplotlib notebook бэкэнд %matplotlib notebook . %config InlineBackend ничего не изменяет для backend ноутбука, поэтому выходной файл содержит изображение PNG

 "data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0.... 

Итак, возникает вопрос: как мне заставить ipynb-файл включать статическую версию сюжета, созданного с %matplotlib notebook бэкэнда %matplotlib notebook качестве изображения SVG?

Есть небольшой комментарий от @mark jay от месяца назад, который хотел сделать именно то, что я хотел бы сделать сейчас, но нет ответа или намека на этот комментарий.

В моем коде я построил прямо из dataframe:

 %matplotlib notebook import pandas as pd df = pd.read_sql(sql1, connection) ... ... df.plot(subplots=True, kind='bar') 

Это прекрасно работает без импорта matplotlib.pyplot но также не может быть принуждено создавать графику как svg. Я полагаю, что если бы базовый случай работал, я мог бы изменить код построения, чтобы он не включал панды или фреймы данных.

2 Solutions collect form web for “Включить вывод из% matplotlib backend в качестве SVG в ipynb”

Поскольку, по-видимому, даже после периода щедрости никто не смог обеспечить решение, обходным путем может быть следующее.

  1. Создайте ноутбук с ноутбуком %matplotlib notebook . После того, как вы удовлетворены результатом, сохраните его.
  2. Используйте его копию и замените %matplotlib notebook

     %matplotlib inline %config InlineBackend.figure_format = 'svg' 

    Перезагрузите ноутбук. Сохраните результат.

  3. Откройте полученный файл ipynb в текстовом редакторе и снова замените предыдущие две строки %matplotlib notebook .

Конечным результатом будет ipynb с изображениями svg. Но как только он откроется и запустится, он будет использовать backend для создания фигуры.

Из того, что я понимаю из чтения о бэкэндах matplotlib, nbagg, который называется использованием %matplotlib notebook использует рендеринг Agg (Anti-Grain Geometry), который не способен отображать векторную графику. К сожалению, это единственный в своем роде способ использования интерактивного встроенного бэкэнда для Jupyter.

Документы Ссылка https://matplotlib.org/faq/usage_faq.html#what-is-interactive-mode
Похожие ответы Как сделать matplotlibs nbagg backend генерировать SVG?

Если вам не нужна интерактивность, просто продолжайте использовать

 import pandas as pd from IPython.display import SVG, display from numpy import ndarray def svg_add(chart, size=(4,4), dpi=100): """Takes a chart, optional tuple of ints for size, int for dpi default is 4 by 4 inches with 100 dpi""" if type(chart) == ndarray: fig = chart[0].get_figure() fig.set_size_inches(size) fig.savefig("mybar.svg", dpi=dpi) display(SVG(filename='mybar.svg')) else: fig = chart.get_figure() fig.set_size_inches(size) fig.savefig("mybar.svg", dpi=dpi) display(SVG(filename='mybar.svg')) 

тогда

 df = pd.DataFrame([[2,5]],columns=['a','b']) bar_chart = df.plot(subplots=False, kind='bar') svg_add(chart=bar_chart,size=(3,3),dpi=100) #or #svg_add(bar_chart,(3,3),100) на df = pd.DataFrame([[2,5]],columns=['a','b']) bar_chart = df.plot(subplots=False, kind='bar') svg_add(chart=bar_chart,size=(3,3),dpi=100) #or #svg_add(bar_chart,(3,3),100) 
  • Вставьте диаграмму pandas в файл Excel с помощью XlsxWriter
  • Импорт Pandas дает ошибку AttributeError: модуль 'pandas' не имеет атрибута 'core' в iPython Notebook
  • Обозначение меток на нескольких столбцах в scikit-learn
  • Прочтите файл csv со многими именованными метками столбцов с помощью pandas
  • python / pandas: как объединить два фрейма данных в один с иерархическим индексом столбца?
  • pandas groupby с двумя ключами
  • Как создать гистограмму в python ggplot?
  • Сортировка порядка баров в барах pandas / matplotlib
  •  
    Interesting Posts for Van-Lav

    Удаление повторяющихся строк из нескольких (2) текстовых файлов в PHP

    как передать аргументы argparse классу

    PySpark разделяет строки и конвертирует в RDD

    Как получить доступ к объекту запроса или любой другой переменной в методе clean () формы?

    Как хранить значения счета в python

    Запрос с поисковым вызовом по курсору вызывает ошибку из-за ограничений для «IN filter» в методе cursor () … Какая должна быть альтернатива?

    Python: запускайте одну функцию до тех пор, пока не закончится другая функция

    Pandas: объединить строки и int столбцы

    Python: объект .__ new __ () не принимает параметров

    Как установить и управлять подключениями к базе данных в многомодульном приложении Python?

    Python, unit test – передать аргументы командной строки setUp unittest.TestCase

    что не так с моим кодом pipon ripemd160?

    Как я могу испустить сигнал PySide с помощью настраиваемого аргумента типа python?

    Сравнение режимов Python для Emacs

    limit () и sort () порядок pymongo и mongodb

    Python - лучший язык программирования в мире.