Включить вывод из% 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) 
  • Сравнение двух столбцов csv и вывода коэффициента сходства строк в другом csv
  • Что такое метод Spark DataFrame `toPandas` на самом деле?
  • Панды на OpenShift v3
  • Python Pandas: группа по группам и средним?
  • Заполните рамку данных pd на существующий лист excel (используя openpyxl v2.3.2)
  • Обновление pandas DataFrame в хранилище в Pytable с помощью другого панда DataFrame
  • python: создавать заголовки столбцов dataframe pandas в нижнем регистре
  • Python и Pandas: сортировка каждой строки в мультииндексе DataFrame
  • python pandas, как объединить панды с одинаковым значением столбца
  • Почему python pandas не использует 3-значную логику?
  • Запись изображения pandas / matplotlib непосредственно в файл XLSX
  •  
    Interesting Posts for Van-Lav

    Чтение изображения .JPG и сохранение его без изменения размера файла

    Как перезагрузить функцию модуля в Python?

    Flask не получает данные из данных запроса jQuery

    как получить сообщение сокета с пустыми данными?

    найти имя цвета из шестнадцатеричного кода цвета

    qt – pyqt QTableView не заполняется при изменении баз данных

    Python: Должен ли я использовать класс или словарь?

    Достичь прогресса в цепочке сельдерея асинхронного питона по идентификатору цепи

    Pandas Чтение CSV с разделителями строк с помощью регулярных выражений

    ImportError: Ошибка загрузки DLL:% 1 не является допустимым приложением Win32. Но DLL есть

    pymongo- Как я могу иметь различные значения для поля вместе с другими параметрами запроса

    Использование инструкции python с инструкцией с блоком try-except

    Как найти перекрытие диапазона в python?

    простая функция json dumps с unicode

    Объявление функции python с параметрами массива и передача аргумента массива вызову функции?

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