ipython shell和显示图表

2024-04-18 10:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用这段代码,在另一个窗口中打开了一个可视化/图表,在ipython shell中没有任何问题:

In [1]: import numpy as np                                                                                                                            

In [2]: import matplotlib.pyplot as plt                                                                                                               

In [3]: matplotlib                                                                                                                                    
Using matplotlib backend: Qt5Agg

In [4]: x = np.linspace(0, 3*np.pi, 500)                                                                                                              

In [5]: plt.plot(x, np.sin(x**2))                                                                                                                     
Out[5]: [<matplotlib.lines.Line2D at 0x7fb6d69ab470>]

In [6]:  

检查这个Screenshot。如果我使用matplotlib以外的任何库,那么我不会得到任何可视化/图表。我确实在笔记本上找到了,但在ipythonshell中没有。我做错什么了吗?在

^{pr2}$

Tags: 代码inimportnumpybackendmatplotlib可视化as
2条回答

这似乎有用

from shapely.geometry import Polygon
import matplotlib.pyplot as plt
poly = Polygon([(0,0), (0,5), (5,5), (5,0)])    
x, y = poly.exterior.xy
fig, ax = plt.subplots()
ax.scatter(x, y)
fig.show()

编辑:为了澄清shapely没有打印功能,而是打算使用matplotlib。另外,display函数只适用于图像数据IIRC,而不是您所给对象的情况。在

matplotlib GUI窗口是通过Qt5Agg后端创建的。这实际上创建了一个PyQt窗口,在其中放置一个导航工具栏和一个画布,并将图形呈现到该画布上。这是一段相当复杂的代码。在

其他库,如shapely,不一定有这样的后端。当然,您可以通过笛卡尔将shapely对象转换为matplotlib补丁,然后以与其他matplotlib图形相同的方式显示包含shapely形状的matplotlib图形。在

那么,为什么你能在jupyter笔记本上直接显示shapely对象呢?在

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)

enter image description here

原因是笔记本在浏览器中呈现。浏览器可以理解html和svg等标记语言。因此,创建对象的svg表示相对容易。这就是shapely does。大多数shapely对象都有一个._repr_svg_()方法。如果打印它的输出,它将是一个svg字符串

^{pr2}$

结果

<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。在

相关问题 更多 >