正方形の軸を維持しながら、あるサブプロットに樹状図を、別のサブプロットにヒートマップを含む単純なサブプロットを作成しようとしています。私は次のことを試みます:
from scipy.cluster.hierarchy import linkage
from scipy.cluster.hierarchy import dendrogram
from scipy.spatial.distance import pdist
fig = plt.figure(figsize=(7,7))
plt.subplot(2, 1, 1)
cm = matplotlib.cm.Blues
X = np.random.random([5,5])
pmat = pdist(X, "euclidean")
linkmat = linkage(pmat)
dendrogram(linkmat)
plt.subplot(2, 1, 2)
labels = ["a", "b", "c", "d", "e", "f"]
Y = np.random.random([6,6])
plt.xticks(arange(0.5, 7.5, 1))
plt.gca().set_xticklabels(labels)
plt.pcolor(Y)
plt.colorbar()
これにより、次のようになります。
ただし、問題は、軸が正方形ではなく、カラーバーが2番目のサブプロットの一部と見なされることです。代わりに、プロットの外側にぶら下げて、樹状図ボックスとヒートマップボックスの両方が正方形で、互いに整列するようにします(つまり同じサイズ)。
aspect='equal'
ドキュメントが示唆するように呼び出すときに正方形の軸を取得するために使用しようとしましsubplot
たが、これはプロットを台無しにし、これを与えます...
plt.axis('equal')
の代わりに各サブプロットの後に使用しようとするとaspect='equal'
、ヒートマップは奇妙に二乗されますが、境界ボックスは二乗されません(以下を参照)が、樹状図を完全に破壊し、xtickラベルの配置を台無しにします....-これを引き起こします混乱:
どうすればこれを修正できますか?要約すると、私は非常に単純なものをプロットしようとしています。上部のサブプロットに正方形の樹状図、下部のサブプロットに正方形のヒートマップがあり、右側にカラーバーがあります。何も派手ではありません。
最後に、より一般的な質問:matplotlibに常に軸を正方形にするために従うべき一般的なルール/原則はありますか?正方形の軸が必要ない単一のケースは考えられませんが、通常はデフォルトの動作ではありません。可能であれば、すべてのプロットを強制的に正方形にします。