IPython.display: SVG не может отобразить изображение svg, созданное svg_filter_line (официальный пример) - PullRequest
5 голосов
/ 09 июня 2019

Я запускаю svg_filter_line (официальный пример) в Jupyter на MacOS с Python3.

SVG хорошо работает с большим количеством изображений svg (например, изображение Worldmap из вики)

enter image description here

оригинальная кодировка svg_filter_line также работает хорошо.

enter image description here

работает svg_filter_lineгенерирует изображение SVG с именем 'svg_filter_line.svg'.

SVG не может отобразить это изображение SVG 'svg_filter_line.svg', без ошибок, без предупреждений.

enter image description here

1 Ответ

1 голос
/ 17 июня 2019

Было немного сложно добраться до этого. Вот решение: при работе с файлами: я обнаружил, что тип файла, отображаемого функцией display() или display_svg(), немного отличается друг от друга (разница в основном в пространстве имен). В качестве обходного пути пришлось заново сохранить файл SVG с помощью svgutils, затем прочитав и отобразив, как показано ниже:

import svgutils.transform as sg
from IPython.display import SVG,display

#create new SVG figure
fig = sg.SVGFigure("16cm", "10cm")

# load matpotlib-generated figures
fig1 = sg.fromfile('svg_filter_line.svg')
plot1 = fig1.getroot()
fig.append([plot1])
fig.save("svg_filter_line2.svg")
display(SVG(filename='svg_filter_line2.svg'))

svgutils можно установить как показано ниже:

conda install -c conda-forge svgutils

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...