оболочка ipython и отображение графиков - PullRequest
0 голосов
/ 15 ноября 2018

Я использую этот код и открываю визуализацию / диаграмму в другом окне без проблем в оболочке ipython:

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. Я делаю что-то неправильно ?

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]:                                                                                                                                              

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Окно 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)

enter image description here

Причина заключается в том, что записные книжки отображаются в браузере.Браузеры понимают языки разметки, такие как 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.

0 голосов
/ 15 ноября 2018

Это похоже на работу

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, что не относится к предоставленному вами объекту.

...