2012-06-21 1 views
4

같은 배열을 공유하는 양수 및 음수 값을 사용하여 여러 개의 배열로 구성된 격자 그리드를 생성하려고합니다.imshow 용 색상 막대, 0 및 symlog 눈금을 중심으로

ImageGrid 및 일반적인 최대 값과 최소값을 사용하여 색상 막대 공유 부분을 얻었습니다. 양수 값만있는 경우 imshow 호출에서 LogNorm()을 사용하여 로그 눈금을 얻을 수 있음을 알고 있습니다. . 그러나 음수 값이 주어지면 대칭 대수 눈금에 컬러 막대가 필요합니다.

내가 https://stackoverflow.com/a/7741317/1101750에 대한 해결책이 될 것입니다 무엇을 찾았지만, 얀가 제공하는 샘플 코드를 실행하는 것은 나에게 매우 다른 결과, 클리 어리 잘못 제공 한 : Result of Yann example 코드 검토, 나는 무슨 일이 일어나고 있는지 파악 할 수 아니에요.

그 외에도 Mat Plotlib 1.2에서 scale.SymmetricalLogScale.SymmetricalLogTransform이 설명서에 설명되어 있지 않은 새로운 인수를 요구한다는 것을 발견했습니다. (linscale, 다른 변환 코드를 살펴보면 다음과 같이 가정합니다. 1은 안전한 값입니다).

LogNorm을 서브 클래 싱하는 가장 쉬운 방법은 무엇입니까?

답변

3

저는 서브 클래 싱을 할 필요없이 아주 간단하게이 작업을 수행했습니다. matplotlib.colors.SymLogNorm은 손으로 틱 마크를 생성해야한다는 것을 제외하고는 필요한 대부분의 기능을 제공합니다. 이 솔루션은 matplotlib 1.3.0을 사용하며 1.2에서 사용할 수 없었던 기능을 사용하고있을 수 있습니다.

def imshow_symlog(my_matrix, vmin, vmax, logthresh=5): 
    img=imshow(my_matrix , 
       vmin=float(vmin), vmax=float(vmax), 
       norm=matplotlib.colors.SymLogNorm(10**-logthresh)) 

    maxlog=int(np.ceil(np.log10(vmax))) 
    minlog=int(np.ceil(np.log10(-vmin))) 

    #generate logarithmic ticks 
    tick_locations=([-(10**x) for x in xrange(minlog,-logthresh-1,-1)] 
        +[0.0] 
        +[(10**x) for x in xrange(-logthresh,maxlog+1)]) 

    cb=colorbar(ticks=tick_locations) 
    return img,cb 
관련 문제