대학원/대회 준비 관련

plt.pcolormesh 함수 확인하기

오비루 2024. 6. 18. 11:22
728x90
728x90
minx, miny = np.min(coords, axis=0)
maxx, maxy = np.max(coords, axis=0)

coords 내의 [x,y] 값의 최대 & 최소 위치를 파악하는 것

collection.sticky_edges.x[:] = [minx, maxx]
collection.sticky_edges.y[:] = [miny, maxy]

최소 & 최대에 대한 경계를 설정해줌그럼 주파수는 어떻게 결정되는거지?

최대 값이 결정되어 있나?

*args = frequencies, times, np.rot90(abs_X)이렇게 해당됨

→ x,y,c 데이터 처리 및 shading 옵션에 따른 데이터 처리

여기에 들어간 args를 통해서 X,Y(좌표값), C(데이터)를 구분해줌.

shading 옵션

  • flat

각 셀에 대해 단일 색상을 사용합니다. 셀의 색상은 해당 셀의 네 꼭짓점 중 첫 번째 점의 값을 기준으로 합니다. 각 셀은 균일한 색상을 가지며, 셀 내부의 색상 변화는 없습니다. 이 방법은 계산이 단순하고 빠릅니다.

  • gouraud

각 셀의 꼭짓점마다 색상이 달라질 수 있으며, 셀 내부의 색상은 꼭짓점 색상 간의 선형 보간에 의해 결정됩니다. 이는 셀 내부에서 부드러운 색상 변화를 제공합니다. 계산이 더 복잡하지만, 더 부드럽고 시각적으로 매끄러운 이미지를 생성합니다.

shading의 중요성

shading 옵션은 데이터 시각화의 정확성과 시각적 품질에 큰 영향을 미칩니다. 예를 들어, 부드러운 색상 변화를 통해 데이터의 세부 사항을 더 잘 나타내고자 할 때는 gouraud를 사용하는 것이 좋습니다. 반면에, 각 셀을 단일 색상으로 표시하여 더 명확하게 구분하고자 할 때는 flat을 사용하는 것이 좋습니다.

→ 우리의 경우 flat 색상을 사용하는 것이 더 좋음


이렇게 하면 기초적인 setting은 끝난거 같음

이후 QuadMesh를 통해 color mapping 하는 과정을 거치는데..

⇒ 사각형 그리드를 사용해서 데이터를 시각화하는데 사용되는 함수임.

QuadMesh class는 Collection 클래스를 상속받기에 QuadMesh 객체 생성시

  1. QuadMesh class의 init 매서드 호출 (초기화 작업 수행)

 

super().init(**kwargs)

를 통해서 부모 클래스인 Collection의 초기화 메서드 실행

2. Collection class의 init 매서드 호출

 

3. Artist Class init

 

728x90

4. ScalarMappable init

Scalar data를 RGBA 색상으로 mapping하는 기능을 제공하는 class

norm & cmap을 사용하여 scalar data 시각화할 때 적절한 색상으로 변환함.

 

self._norm = None  # 정규화 객체 초기화. 이는 setter 메서드가 초기화 중임을 알 수 있도록 함
self.set_norm(norm)  # 정규화 객체 설정
self.cmap = None  # 컬러맵 초기화. 이는 세터 메서드가 초기화 중임을 알 수 있도록 함
self.set_cmap(cmap)  # 컬러맵 설정

 

→ 객체의 컬러맵을 설정하는 method임.

320x100

변경되었음을 알리기위해 changed method호출.

_ensure_cmap 함수

‘_ensure_cmap’ 함수는 주어진 입력이 유효한 Colormap 객체인지 확인하고, 그렇지 않은 경우 이를 적절한 Colormap 객체로 변환하는 역할을 합니다. 이 함수는 내부적으로 사용되며, 컬러맵 타입의 안정성을 유지하고 오류 처리를 일관되게 하기 위해 설계되었습니다.

만약 cmap이 이미 Colormap 객체라면, 그대로 반환

→ 그냥 color map & norm 지정을 위해 필요한 과정임


기본값 사용

->set_facecolor, set_edgecolor, set_linewidth, set_linestyle, set_antialiased는 None일 경우 기본값을 사용합니다.

특별한 처리 없음

-> set_pickradius, set_urls, set_hatch, set_zorder는 None일 경우 특별한 처리를 하지 않으며, 내부 변수에 None을 저장합니다.

따라서, 위의 다섯 가지 기본 값 사용 내용 함수 살펴봐야 할 듯


아님. 핵심은 이거인듯

이 부분이 바로 QuadMesh를 호출하게 되었을 때 객체를 그릴 때 자동적으로 해당 메서드가 호출되는 부분이라고 함.

Artist → Collection → QuadMesh 순서로 class가 이루어짐

여기서 Artist 객체는 matplotlib의 그리기 시스템에서 자동으로 관리됨

이 부분을 통해서 QuadMesh 객체는 Axes 객체에 추가되어 matplotlib의 draw 시스템에 등록됨

이때 autolim = False로 설정하여 데이터의 한계를 지정해두지 않음.

그 이유는 active하게 한계를 설정하기 위해 이후 단계에서 corners를 설정한 것을 업데이트 하기 위함.

모든 조건을 Axes 객체에 추가해준 뒤 자동 스케일을 요청하면, Axes의 autoscale_view를 호출하여 view 한계를 설정한다.

⇒ 위의 단계를 통해서 Axes에 collection이 추가됨


가장 중요한 부분은 add_collection 부분 같음 (??이 데이터를 바탕으로 plt를 통해서 이미지로 시각화 한다.Scalar Data에 대해서 1:1 mapping하는 방식이 맞음.

Scalar data to Color mapping

→ norm & cmap 인자를 통해 데이터 값이 컬러 맵을 통해 색상으로 변환

coords 배열 기반(x,y)으로 격자의 좌표 설정

array = c 를 설정하여 컬러 매핑할 데이터 지정

set_norm & set_cmap을 통해서 정규화 객체 & 컬러맵 설정

kwargs에서 array인자 처리

이게 나옴. 다시 들어가보면,

 

이후 해당 메서드를 통해서 ‘set_’ 접두어를 붙인 메서드를 호출한다.

이를 통해 set_array가 호출됨

h, w 값 설정 후 데이터의 허용 가능한 형태 정의

[ 3채널, 4채널, 2차원 스칼라 데이터, 1차원 스칼라 데이터]

이후 입력 데이터의 형태를 검증 후 ok_shaeps내에 존재하는 값 중 하나인지 확인.

 

부모 클래스의 set_array 호출하여 A를 설정하여 배열 내의 값이 유효한 값으로 존재하는지 확인.

⇒ 사실상 그닥 color mapping에 있어서 중요한 함수는 아닌데? 다른걸 다시 살펴봐야함.

 


draw 메서드의 실행이 중요한듯

해당 메서드는 plt.show()와 같은 matplotlib 내부 이벤트로 인해 호출되게 됨.

위의 경우에는 savefig 수행하면서 draw가 호출되는 것임.

 

Quadmesh 내의 draw 함수가 수행되는데,

 

이 부분이 색상 매핑을 업데이트 하는 부분임.

여기서 to_rgba 함수를 살펴보도록 하자.

x = 변환할 데이터

alpha = 투명도 지정

cmap을 이 부분에서 수행함.

Colormap 객체로 들어가 봄.

여기서 call 메서드가 실행되며 주어진 데이터를 RGBA 색상 값으로 변환을 해줌.

 

동작 순서

  1. 초기화: Colormap 객체가 초기화되지 않았으면 _init 메서드를 호출하여 초기화합니다.
  2. 마스크 설정:
    • X가 마스킹된 배열이면 mask_bad에 X.mask를 할당합니다.
    • 아니면 np.isnan(xa)를 통해 마스크를 설정합니다.
  3. 배열 변환:
    • X를 xa로 복사하여 numpy 배열로 변환합니다.
    • 바이트 순서가 기본 바이트 순서가 아니면 바이트 순서를 변환합니다.
  4. 데이터 정규화:
    • xa의 부동 소수점 값은 self.N으로 곱하여 정규화합니다.
    • 음수 값은 -1로 설정합니다.
    • xa 값이 self.N과 같으면 self.N - 1로 설정합니다.
    • xa 값을 -1과 self.N 사이로 클리핑합니다.
  5. 정수 변환: 부동 소수점 또는 부호 없는 정수 값을 정수로 변환합니다.
  6. 범위 설정:
    • 초과 범위 값은 self._i_over로 설정합니다.
    • 미만 범위 값은 self._i_under로 설정합니다.
    • 잘못된 값은 self._i_bad로 설정합니다.
  7. 색상 룩업 테이블 적용:
    • lut을 사용하여 xa 값을 색상으로 변환합니다.
  8. 알파 값 설정:
    • alpha 값이 주어지면, 알파 값을 0과 1 사이로 클리핑하고, bytes가 True이면 255로 곱하여 uint8로 변환합니다.
    • 알파 값이 X의 형태와 일치하지 않으면 오류를 발생시킵니다.
    • 알파 값을 RGBA 배열의 마지막 채널에 설정합니다.
    • "bad" 색상이 모두 0이면 알파 입력을 무시합니다.
  9. 반환 형식 설정:
    • X가 스칼라 값이면 RGBA 값을 튜플로 반환합니다.
    • 배열이면 RGBA 값을 배열로 반환합니다.

“size = 129 x 1663 = 214,527”

⇒ 정상적으로 size가 나오는 것 이었음

 

728x90
반응형