<p>matplotlib GUI窗口是通过Qt5Agg后端创建的。这实际上创建了一个PyQt窗口,在其中放置一个导航工具栏和一个画布,并将图形呈现到该画布上。这是一段相当复杂的代码。在</p>
<p>其他库,如shapely,不一定有这样的后端。当然,您可以通过笛卡尔将shapely对象转换为matplotlib补丁,然后以与其他matplotlib图形相同的方式显示包含shapely形状的matplotlib图形。在</p>
<p>那么,为什么你能在jupyter笔记本上直接显示shapely对象呢?在</p>
<pre><code>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)
</code></pre>
<p><a href="https://i.stack.imgur.com/Ht1VA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Ht1VA.png" alt="enter image description here"/></a></p>
<p>原因是笔记本在浏览器中呈现。浏览器可以理解html和svg等标记语言。因此,创建对象的svg表示相对容易。这就是<a href="https://github.com/Toblerity/Shapely/blob/fc12a113f2c234ec76f4935d1a94d0b134cc91fb/shapely/geometry/base.py#L383" rel="nofollow noreferrer">shapely does</a>。大多数shapely对象都有一个<code>._repr_svg_()</code>方法。如果打印它的输出,它将是一个svg字符串</p>
^{pr2}$
<p>结果</p>
<pre><code><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>
</code></pre>
<p>此字符串由浏览器解释并显示相应的图像。在</p>
<p>python控制台没有任何选项来内部显示svg图像。因此,这只适用于jupyter或IPython Qtconsole,而不是标准IPython。在</p>