2014-02-20 8 views
0

오른쪽에서 나는 1000 개의 행렬의 고유 값 스펙트럼이 서로에 대해 플롯되어 있습니다. 왼쪽에서 나는 고유치가 발생하는 빈도와 빈도를 히스토그램 또는 밀도 함수로 얻고 싶었습니다.numpy의 histogram2d 및 colormaps와 관련된 문제

Two Panel Eigenvalue Distribution Plot

은 히스토그램은 NumPy와 함께 이루어집니다 :

bins = 200 
d = max(max(re), max(im), -min(re), -min(im)) 
histogram2D, binsX, binsY = np.histogram2d(re, im, bins=bins, range=((-d,d),(-d,d))) 
histogram2D = histogram2D.T 

또한 각각의 빈에서 고유의 양에 고유 값이 발생한 장소를 내가 분명히 보여 여전히 히스토그램을 원하고 그들이하지 않았다 곳. 그래서 난 내 자신의 컬러 맵 제작 :

def redblue_zeta(Zmin, Zmax, zeta=0.0): 
    breakingpoint = float(Zmin)+float(zeta)/(float(Zmax)-float(Zmin)) 
    cdict = {'red': ((0.0, 1.0, 1.0), (breakingpoint, 1.0, 0.0), (1.0, 1.0, 1.0)), 
      'green': ((0.0, 1.0, 1.0), (breakingpoint, 1.0, 0.0), (1.0, 0.0, 0.0)), 
      'blue': ((0.0, 1.0, 1.0), (breakingpoint, 1.0, 1.0), (1.0, 0.0, 0.0))} 
    return(cdict) 

(. 내가 다른 플롯에 대한지도 제타> 0 aswell를 사용하기 때문에이 조금 더 복잡하다)을 그리고 나는 플롯 : 그래서

Zmax = histogram2D.max() 
cdict=cc.redblue_zeta(0,Zmax,zeta=0.0) 
plt.register_cmap(name='rb', data=cdict) 

plt.imshow(histogram2D, cmap=cm.get_cmap('rb'), extent=[-d, d, -d, d], interpolation='nearest') 

2D 플롯의 점은 해당 빈에 정확히 0 개의 고유 값이있는 경우 흰색으로 간주됩니다. 그렇지 않으면 그것은 청색과 적색 사이의 어떤 것으로되어 있습니다. 그러나 그것은 내가 얻는 것이 아닙니다. 히스토그램 플롯에서 너무 작은 파란색 영역을 얻으므로 막대 그래프 또는 색상 맵 중 작은 값이 0으로 반올림되는 것으로 보입니다. 어떤 아이디어? 감사.

답변

0

내장 된 기능 중 하나의 크기가 조정 된 버전 대신 자신 만의 색상 맵이 필요한 이유가 있습니까? 그렇지 않다면 내장 된 컬러 맵으로 이동하여 그 방식으로 작업 할 수 있는지 확인하십시오. 나중에 색상을 조정할 수 있습니다.

자신이 정말로 필요한 경우, 색상 맵이 아직 제대로 작동하지 않는다고 생각됩니다. 먼저 LinearSegmentedColor 맵을 생성하기 위해 register_cmap을 수정 한 다음 해당 맵을 등록 할 수 있습니까? http://matplotlib.org/api/colors_api.html#matplotlib.colors.LinearSegmentedColormap

어떻게 보이는지 보려면지도를 단독으로 표시 해본 적이 있습니까?

둘째, 문서를 따르기 위해, 튜플의 튜플 (tuples) 사전에서 튜플 목록 사전으로 전환하는 것이 좋습니다.