2017-06-20 1 views
0

イメージとカラーバーの値が右側に重なってしまうのを取り除こうとしていますが、何も問題はありません。私は 'タイトな'コマンドを試して、カラーバーのテキストのサイズを縮小しました。前者は役に立たず、後者はまったく動かないようです。 (これは可能ですか?)私はこれらの数字を読む方法が必要です。 (限り、彼らは重複しないよう)Pythonプロットのカラーバーを修正しました

enter image description here

gs = gridspec.GridSpec(1, 2) 
gs0 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs[0]) 
gs1 = gridspec.GridSpecFromSubplotSpec(2, 2, subplot_spec=gs[1]) 

fig = plt.figure() 


ax = fig.add_subplot(gs0[0, 0]) 
plt.imshow(getpoly(seg1),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[0, 1]) 
plt.imshow(getpoly(seg2),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[0, 2]) 
plt.imshow(getpoly(seg3),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[1, 0]) 
plt.imshow(getpoly(seg4),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[1, 1]) 
plt.imshow(getpoly(seg5),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[1, 2]) 
plt.imshow(getpoly(seg6),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[2, 1]) 
plt.imshow(getpoly(seg7),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[2, 2]) 
plt.imshow(getpoly(seg8),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 
ax = fig.add_subplot(gs0[2, 0]) 
plt.imshow(getpoly(seg9),origin="lower") 
ax.set_xticks([]); ax.set_yticks([]) 



ax = fig.add_subplot(gs1[0, 0]) 
plt.imshow(h1,origin="lower") 
plt.colorbar(fraction=0.046, pad=0.04) 
ax.set_xticks([]); ax.set_yticks([]) 

ax = fig.add_subplot(gs1[0, 1]) 
plt.imshow(h2,origin="lower") 
plt.colorbar(fraction=0.046, pad=0.04) 
ax.set_xticks([]); ax.set_yticks([]) 

ax = fig.add_subplot(gs1[1, 0]) 
plt.imshow(getpoly(h2),origin="lower") 
plt.colorbar(fraction=0.046, pad=0.04) 
ax.set_xticks([]); ax.set_yticks([]) 

ax = fig.add_subplot(gs1[1, 1]) 
plt.imshow(h1-getpoly(h2),origin="lower") 
plt.colorbar(fraction=0.046, pad=0.04) 
ax.set_xticks([]); ax.set_yticks([]) 

plt.tight_layout() 
+0

これは完全なコードまたはその一部ですか? – user1767754

答えて

2

にあなたはcolorbar-whose-height-or-width-in-sync-with-the-master-axes〜実施例を見てもよいことがわかりました。

mpl_toolkits.axes_grid1.make_axes_locatableを使用して軸の一部を切り取り、fig.colorbar(im, cax=cax)を使用してカラーバーを配置できる新しい軸を作成することです。

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

gs = gridspec.GridSpec(1, 2) 
gs0 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs[0]) 
gs1 = gridspec.GridSpecFromSubplotSpec(2, 2, subplot_spec=gs[1]) 

fig = plt.figure() 

for i in range(9): 
    ax = fig.add_subplot(gs0[i//3, i%3]) 
    ax.imshow(np.random.rand(4,4)) 
    ax.set_xticks([]); ax.set_yticks([]) 


for i in range(4): 
    ax = fig.add_subplot(gs1[i//2, i%2]) 
    im = ax.imshow(np.random.rand(4,4)) 
    ax.set_xticks([]); ax.set_yticks([]) 
    divider = make_axes_locatable(ax) 
    cax = divider.append_axes("right", size="5%", pad=0.05) 
    fig.colorbar(im, ax=ax, cax=cax) 

plt.show() 

enter image description here

0

私はそれが簡単にadd the colorbar separately

cax = fig.add_axes([0.125, 0.925, 0.775, 0.0725]) 
    #the numbers in fig.add_axes are all percentages 
    norm = mpl.colors.Normalize(vmin=low_val, vmax=high_val) 
    mpl.colorbar.ColorbarBase(cax, cmap='rainbow', norm=norm, orientation='horizontal') 

fig.add_axes details

+0

カラーバーの作成に画像を使用しない理由がないと思います。ここでの問題は、カラーバーの配置に関するものです。ですから、疑問はむしろ、 'キャックス 'を置くための良い座標をどのように見つけるのでしょうか? – ImportanceOfBeingErnest

関連する問題