ipython shell 并显示图表
ipython shell and displaying charts
我正在使用此代码,我在另一个 window 中打开了一个 visualization/chart,在 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 以外的任何库,那么我不会得到任何 visualization/chart。我确实在笔记本中找到了它,但在 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]:
这似乎有效
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 一起使用。此外,显示功能仅适用于图像数据 IIRC,您提供的对象并非如此。
matplotlib GUI window 是通过 Qt5Agg 后端创建的。这实际上创建了一个 PyQt window,在其中放置了一个导航工具栏和一个 canvas,并将图形渲染到此 canvas。这是一段相当复杂的代码。
其他图书馆,例如身材匀称,不一定有这样的后端。但是当然你可以通过笛卡尔将一个有形状的对象转换成一个 matplotlib 补丁,然后以与任何其他 matplotlib 图相同的方式显示带有你的有形形状的 matplotlib 图。
那为什么可以直接在jupyter notebook中显示有形的对象呢?
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 表示相对容易。这就是shapely does。大多数形状优美的对象都有一个 ._repr_svg_()
方法。如果你打印它的输出,它将是一个 svg string
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.
我正在使用此代码,我在另一个 window 中打开了一个 visualization/chart,在 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 以外的任何库,那么我不会得到任何 visualization/chart。我确实在笔记本中找到了它,但在 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]:
这似乎有效
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 一起使用。此外,显示功能仅适用于图像数据 IIRC,您提供的对象并非如此。
matplotlib GUI window 是通过 Qt5Agg 后端创建的。这实际上创建了一个 PyQt window,在其中放置了一个导航工具栏和一个 canvas,并将图形渲染到此 canvas。这是一段相当复杂的代码。
其他图书馆,例如身材匀称,不一定有这样的后端。但是当然你可以通过笛卡尔将一个有形状的对象转换成一个 matplotlib 补丁,然后以与任何其他 matplotlib 图相同的方式显示带有你的有形形状的 matplotlib 图。
那为什么可以直接在jupyter notebook中显示有形的对象呢?
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 表示相对容易。这就是shapely does。大多数形状优美的对象都有一个 ._repr_svg_()
方法。如果你打印它的输出,它将是一个 svg string
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.