복붙노트

[PYTHON] Imshow : 범위 및 측면

PYTHON

Imshow : 범위 및 측면

저는 3D 데이터 세트를 통해 조각과 투영을 시각화하는 소프트웨어 시스템을 작성하고 있습니다. 나는 matplotlib를 사용하고 있는데 특별히 분석 코드에서 얻은 이미지 버퍼를 시각화하기 위해 imshow를 사용하고있다.

플롯 축으로 이미지에 주석을 달고 싶기 때문에 imshow가 제공하는 범위 키워드를 사용하여 이미지 버퍼 픽셀 좌표를 데이터 공간 좌표계에 매핑합니다.

유감스럽게도 matplotlib은 단위에 대해 알지 못합니다. 1,000m x 1km의 크기로 이미지를 그려보고 싶다고 (인공적인 예를 들어) 말하십시오. 이 경우 범위는 [0, 1000, 0, 1]과 비슷할 것입니다. 이미지 배열이 정사각형 임에도 불구하고 extent 키워드가 암시하는 종횡비가 1000이므로 결과로 만든 플롯 축의 종횡비는 1000입니다.

Extent 키워드를 사용하여 자동 생성 된 주요 눈금과 레이블을 유지하면서 음모의 종횡비를 강제 적용 할 수 있습니까?

해결법

  1. ==============================

    1.이미지의 측면을 수동으로 설정하거나 (그림의 범위를 채우기 위해 자동 크기 조절을 사용하여)이를 수행 할 수 있습니다.

    이미지의 측면을 수동으로 설정하거나 (그림의 범위를 채우기 위해 자동 크기 조절을 사용하여)이를 수행 할 수 있습니다.

    기본적으로 imshow는 플롯의 모양을 1로 설정합니다. 이는 사람들이 이미지 데이터에 대해 원하는 경우가 많기 때문입니다.

    귀하의 경우 다음과 같이 할 수 있습니다 :

    import matplotlib.pyplot as plt
    import numpy as np
    
    grid = np.random.random((10,10))
    
    fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(6,10))
    
    ax1.imshow(grid, extent=[0,100,0,1])
    ax1.set_title('Default')
    
    ax2.imshow(grid, extent=[0,100,0,1], aspect='auto')
    ax2.set_title('Auto-scaled Aspect')
    
    ax3.imshow(grid, extent=[0,100,0,1], aspect=100)
    ax3.set_title('Manually Set Aspect')
    
    plt.tight_layout()
    plt.show()
    

  2. from https://stackoverflow.com/questions/13384653/imshow-extent-and-aspect by cc-by-sa and MIT license