繁体   English   中英

ipython shell和显示图表

[英]ipython shell and displaying charts

我正在使用此代码,并且在另一个窗口中打开了可视化/图表,而在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]:  

检查此屏幕截图 如果我使用除matplotlib之外的任何库,那么我没有任何可视化/图表。 我确实在笔记本中获得了它,但在ipython shell中却没有。 难道我做错了什么 ?

In [7]: poly = Polygon([(0,0), (0,5), (5,5), (5,0)])                                                                                                  

In [8]: print(poly)                                                                                                                                   
POLYGON ((0 0, 0 5, 5 5, 5 0, 0 0))

In [9]: print('area', poly.area)                                                                                                                      
area 25.0

In [10]: display(poly)                                                                                                                                
<shapely.geometry.polygon.Polygon at 0x7fc2a3f9d5c0>

In [11]:                                                                                                                                              

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

其他库(例如形状库)不一定具有这样的后端。 但是,当然,您可以通过笛卡尔将有形状的对象转换为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。

这似乎有效

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()

编辑:澄清匀称没有绘图功能,旨在与matplotlib一起使用。 另外,显示功能仅适用于图像数据IIRC,而您提供的对象则不是这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM