サブプロットの行に同じカラーバーを共有する必要があります。各サブプロットは、色関数に対して対称の対数スケーリングを有する。これらのタスクのそれぞれは、stackoverflowでここで説明した素晴らしい解決策を持っています:For sharing the color barとfor nicely formatted symmetric logarithmic scaling。対称対数スケーリングでの複数のサブプロットの1つのカラーバー
しかし、同じコードで両方のトリックを組み合わせると、カラーバー "忘れ"は対称対数であると考えられます。この問題を回避する方法はありますか?生成される出力は次のようである
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
from matplotlib import colors, ticker
# Set up figure and image grid
fig = plt.figure(figsize=(9.75, 3))
grid = ImageGrid(fig, 111, # as in plt.subplot(111)
nrows_ncols=(1,3),
axes_pad=0.15,
share_all=True,
cbar_location="right",
cbar_mode="single",
cbar_size="7%",
cbar_pad=0.15,
)
data = np.random.normal(size=(3,10,10))
vmax = np.amax(np.abs(data))
logthresh=4
logstep=1
linscale=1
maxlog=int(np.ceil(np.log10(vmax)))
#generate logarithmic ticks
tick_locations=([-(10**x) for x in xrange(-logthresh, maxlog+1, logstep)][::-1]
+[0.0]
+[(10**x) for x in xrange(-logthresh,maxlog+1, logstep)])
# Add data to image grid
for ax, z in zip(grid,data):
print z
im = ax.imshow(z, vmin=-vmax, vmax=vmax,
norm=colors.SymLogNorm(10**-logthresh, linscale=linscale))
# Colorbar
ax.cax.colorbar(im,ticks=tick_locations, format=ticker.LogFormatter())
ax.cax.toggle_label(True)
#plt.tight_layout() # Works, but may still require rect paramater to keep colorbar labels visible
plt.show()
:
テストコードは、私が明白な方法で上記の2つの参照を組み合わせているため、以下、ある
はい、これは私が達成しようとしていたものです。あなたの答えに基づいて、元のサンプルコードを変更して、ソリューションのように軸の寸法を手動で調整する必要がなくなりました。私はそれを行うための好ましい方法だと思うので、私は別の答えとしてこれを投稿します。 – mjo