Окно GUI matplotlib создается через бэкэнд Qt5Agg.По сути, это создает окно PyQt, помещает в него панель инструментов навигации и холст и отображает рисунок на этом холсте.Это довольно сложный кусок кода.
Другие библиотеки, например, shapely, не обязательно имеют такой бэкэнд.Но, конечно, вы можете преобразовать фигурный объект в патч matplotlib через декарты, а затем отобразить фигуру matplotlib с вашей фигурой в ней так же, как и любую другую фигуру matplotlib.
Так почему же вы можете отображать фигурные объекты непосредственно в блокноте Jupyter ?
from shapely.geometry import Polygon, LineString
poly = Polygon([(0,0), (0,5), (5,5), (5,0)])
line = LineString([(0,0), (0,5), (5,0), (5,5)])
display(poly)
display(line)
Причина заключается в том, что записные книжки отображаются в браузере.Браузеры понимают языки разметки, такие как html и svg.Следовательно, относительно легко создать svg-представление объекта.Это то, что стройно делает .У большинства стройных объектов есть метод ._repr_svg_()
.Если вы напечатаете вывод, это будет svg-строка
print(poly._repr_svg_())
, в результате
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100.0" height="100.0" viewBox="-0.2 -0.2 5.4 5.4" preserveAspectRatio="xMinYMin meet">
<g transform="matrix(1,0,0,-1,0,5.0)">
<path fill-rule="evenodd" fill="#66cc99" stroke="#555555" stroke-width="0.10800000000000001" opacity="0.6" d="M 0.0,0.0 L 0.0,5.0 L 5.0,5.0 L 5.0,0.0 L 0.0,0.0 z" />
</g>
</svg>
Эта строка интерпретируется браузером и отображается соответствующее изображение.
Консоль Python не имеет никакой возможности для внутреннего отображения изображений SVG.Следовательно, это работает только в Jupyter или IPython Qtconsole, но не в стандартном IPython.