Почему Shapely строит две линии, когда я меняю координату? - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь понять, как работает Shapely.

Я могу нарисовать простую линию с помощью следующего кода:

import matplotlib.pyplot as plt

A = Point(0,0)
B = Point(1,1)
AB = LineString([A,B])

plt.plot(AB)

Однако, когда я изменяю координаты:

A = Point(1,0)
B = Point(3,4)
AB = LineString([A,B])

plt.plot(AB)

Shapely решает построить две линии, и это поведение, которое я не понимаю.

Использование Shapely 1.7.0

Screenshot

1 Ответ

2 голосов
/ 08 февраля 2020

Вы используете plt.plot() неправильно.

Что такое plt.plot() доза График y против x в виде линий и / или маркеров.

В документах вы можете видеть, что, поскольку вызов plot(AB) имеет только 1 аргумент, AB передается как значения Y. в этом случае значение X является индексом элементов в массиве значений Y.

Это то же самое, что и вызов plt.plot([(1,0),(3,4)]). так как у вас есть 2 кортежа значений Y, вы получите 2 разные строки: [(0,1),(1,3)] и [(0,0),(1,4)]. (обратите внимание, что значения x равны 0 и 1, индексу соответствующего кортежа значения Y).

На снимке экрана вы видите, что в первом случае вы также строите 2 линии. но в случае этих указанных c значений plt.plot([(0,0),(1,1)]) построит одну и ту же линию дважды.

Если вы просто хотите построить линию от точки А к точке Б, вы можете использовать:

A = Point(1,0)
B = Point(3,4)
AB = LineString([A,B])

plt.plot(*AB.xy)

plt.show()
...