다각형은 두 개의 목록으로 표시됩니다. 목록 xs
에는 x 좌표가 내림차순으로 포함됩니다. 각 x 값에 대해 목록 regions
의 해당 요소는 조각 목록입니다. 각 슬라이스는 다각형의 내부에 속하는 y 범위를 나타냅니다. 각 x 값에 대해 슬라이스는 오름차순으로 정렬됩니다.Matplotlib의 채우기 기능에 포인트를 주문하는 방법은 무엇입니까?
Matplotlib의 fill
함수를 사용하여 채워진 다각형을 그려야합니다. 이 함수는 포인트를 따라 점을 그리면서 다각형의 윤곽을 설명하도록 점을 정렬해야합니다. 올바른 다각형을 얻기 위해 데이터 세트의 점을 정렬하려면 어떻게해야합니까?
다음은 내가 가지고있는 데이터 종류의 예입니다.
xx = [10, 9, 8, 7, 6, 5, 4, 3, 3, 4, 5, 5, 4, 3, 2, 1,
1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8,
9, 9, 8, 8, 9, 10]
yy = [0, 0, 1, 1.3, 1.8, 1.9, 2, 2.1, 2.7, 2.9, 3, 3.1,
3.2, 3.4, 3.5, 3.8, 5.3, 5.2, 5.1, 5, 6, 5.9, 5.7,
5.8, 6.1, 6.4, 6.3, 6.2, 6.3, 6, 6, 5.8, 5.8, 5.2,
5.4, 5, 4, 3]
을 다음과 그림은 지금까지와 같은
과 같아야로
xs = range(10, 0, -1)
regions = [[slice(0, 3)],
[slice(0, 4), slice(5.2, 5.8)],
[slice(1, 5), slice(5.4, 5.8)],
[slice(1.3, 6)],
[slice(1.8, 6)],
[slice(1.9, 3), slice(3.1, 6.1)],
[slice(2, 2.9), slice(3.2, 5), slice(6, 6.2)],
[slice(2.1, 2.7), slice(3.4, 5.1), slice(5.9, 6.3)],
[slice(3.5, 5.2), slice(5.7, 6.4)],
[slice(3.8, 5.3), slice(5.8, 6.1)]]
포인트를 주문하는 올바른 방법은, 내가 전환점, 즉 정의 시도 , x 값은 윤곽이 방향을 변경하는 값입니다. 이 작업은 각 x 값에 대한 조각 수를 포함하는 배열에 적용한 numpy.diff
으로 수행 할 수 있습니다. 차이가 0이 아니면 그 x 값은 전환점입니다. 이것은 아마도 다음 지점을 파악하는 데 사용될 수 있습니다. 어려움은 다음 슬라이스와 슬라이스의 시작 또는 끝 사용 여부를 파악하는 것입니다.
This question과 비슷하지만, 제 경우에는 다각형이 훨씬 복잡한 모양을 가지고 있습니다. 반면에, 나는 다각형 안에있는 것에 대한 정보를 가지고 있습니다.
편집
난 그냥 명시된 바와 같이 문제가 항상 유일한 해결책이 없음을 깨달았다. 예를 들어, 실시 예에서의 포인트들의 세트는 상기도
xx = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 5,
4, 3, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8,
9, 9, 8, 8, 9, 10]
yy = [0, 0, 1, 1.3, 1.8, 1.9, 2, 2.1, 3.5, 3.8, 5.3, 5.2,
2.7, 2.9, 3, 3.1, 3.2, 3.4, 5.1, 5, 6, 5.9, 5.7,
5.8, 6.1, 6.4, 6.3, 6.2, 6.1, 6, 6, 5.8, 5.8, 5.2,
5.4, 5, 4, 3]
I 찾던 용액 수직으로부터 (떨어져 각각의 에지의 기울기의 절대 값을 최소화하는 하나의 해결책을 인정 세그먼트). 위의 예에서는 첫 번째 해결 방법에 해당합니다.