2017-05-05 1 views
0

이 플롯을 어떻게 수정할 수 있습니까?gridspec으로 열 너비를 조정하는 방법은 무엇입니까?

내가 원하는 :

  1. 컬러 바 모두 중복되지.
  2. 높이를 플롯과 동일하게 만듭니다.

    combined = (...) # some irrelevant to question data praparation - this variable contain square matrix with RGBA chanels 
    
    plt.figure(dpi=300, figsize=(2.1,1.9)) 
    gs = gridspec.GridSpec(1, 3, width_ratios=[20,1,1]) 
    ax1 = plt.subplot(gs[0]) 
    ax2 = plt.subplot(gs[1]) 
    ax3 = plt.subplot(gs[2]) 
    
    cax = ax1.imshow(combined, interpolation="None") 
    mpl.colorbar.ColorbarBase(ax2, cmap=cmap_top, norm=norm_top) 
    mpl.colorbar.ColorbarBase(ax3, cmap=cmap_top, norm=norm_top) 
    

    내가 파이썬 3.6를 사용하고 2.0을하기 matplotlib 해요 :

여기 내 코드입니다.

broken plot

답변

0

제안이 경우 gridspec 사용하지 않는 것입니다. mpl_toolkits.axes_grid1make_axes_locatable 클래스를 사용하여 새 색상 막대 축을 만들 수 있습니다.

그런 다음 나누기의 채우기 및 그림 여백 (subplots_adjust 사용)에 대한 맞춤 매개 변수를 찾아야합니다. 년 Colorbar의 ticklabels이 겹치지 않도록 충분한 공간은 만들기

import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 
import matplotlib.colorbar 
import numpy as np; np.random.seed(1) 

a = -np.log10(np.random.rand(25,25)) 

fig, ax = plt.subplots(dpi=300, figsize=(2.1,1.9)) 
fig.subplots_adjust(left=0.15,right=.78) 

cmap=plt.cm.terrain 
norm = matplotlib.colors.LogNorm(1e-3, 4) 

im = ax.imshow(a, interpolation="None", cmap=cmap, norm=norm) 

divider = make_axes_locatable(ax) 
cax = divider.new_horizontal(size="5%", pad=0.05) 
cax2 = divider.new_horizontal(size="5%", pad=0.45) 

fig.add_axes(cax) 
fig.add_axes(cax2) 

plt.colorbar(im, cax=cax) 
plt.colorbar(im, cax=cax2) 

plt.show() 

enter image description here

이 경우 거의 절반 그림의 폭이 필요하지만 나는 당신이 그것을 할 방법이 가정하자.

0

문제 번호 1에 대한 두 가지 가능성을 고려해 볼 수 있습니다. a. 그림 사이의 가로 간격을 제어하는 ​​wspace 매개 변수를 수정하십시오. 예 :

gs = gridspec.GridSpec(1, 3, width_ratios=[20,1,1]) 
gs.update(wspace=0.05) 

b. 일부 빈 공간 역할을하는 제 1 및 제 2 년 Colorbar 사이에 여분의 열을 추가 문제 번호 2로

(0.15 그냥 여기 예입니다)

gs = gridspec.GridSpec(1, 4, width_ratios=[20,1,0.15,1]) 

, 나는 그것을 다르게 작성합니다 (부여 그것은 도움이

ax2=plt.subplot(gs[0,1] ) 
cb1 = matplotlib.colorbar.ColorbarBase(ax2, cmap="RdBu_r") 

이 희망

: 나를 위해 오히려 잘 작동합니다!
관련 문제