как сделать квадратные участки в matplotlib с тепловыми картами?

Я пытаюсь сделать простой участок с дендрограммой на одном участке и тепловой картой на другом, сохраняя при этом квадратные оси. Я пробую следующее:

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()

это дает следующее:

enter image description here

но проблема в том, что оси не квадратные, а цветная полоса считается частью второго сюжета. Вместо этого я бы хотел, чтобы он висел за пределами графика и сделал так, чтобы поле дендрограммы и поле тепловой карты были квадратными и выровнены друг с другом (, т.е. одного размера.)

Я попытался использовать aspect='equal'для получения квадратных осей при вызове subplot, как следует из документации, но это испортило сюжет, дав это...

enter image description here

если я попытаюсь использовать plt.axis('equal')после каждого подграфика вместо aspect='equal', он странным образом квадратит тепловую карту, но не ее ограничивающую рамку (, см. ниже ), при этом полностью разрушая дендрограмму, а также искажая выравнивание xtick ярлыки.... -породившие этот беспорядок:

enter image description here

как это можно исправить? Подводя итог, я пытаюсь построить что-то очень простое :квадратную дендрограмму на верхнем участке и квадратную тепловую карту на нижнем участке с цветной полосой справа. ничего особенного.

наконец, более общий вопрос :существует ли общее правило/принцип, которому следует следовать, чтобы заставить matplotlib всегда делать оси квадратными? Я не могу вспомнить ни одного случая, когда мне не нужны квадратные оси, но обычно это не поведение по умолчанию. Я бы хотел, чтобы все участки были квадратными, если это возможно.

13
задан 9 August 2012 в 23:24
поделиться