Я пытаюсь сделать простой участок с дендрограммой на одном участке и тепловой картой на другом, сохраняя при этом квадратные оси. Я пробую следующее:
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()
это дает следующее:
но проблема в том, что оси не квадратные, а цветная полоса считается частью второго сюжета. Вместо этого я бы хотел, чтобы он висел за пределами графика и сделал так, чтобы поле дендрограммы и поле тепловой карты были квадратными и выровнены друг с другом (, т.е. одного размера.)
Я попытался использовать aspect='equal'
для получения квадратных осей при вызове subplot
, как следует из документации, но это испортило сюжет, дав это...
если я попытаюсь использовать plt.axis('equal')
после каждого подграфика вместо aspect='equal'
, он странным образом квадратит тепловую карту, но не ее ограничивающую рамку (, см. ниже ), при этом полностью разрушая дендрограмму, а также искажая выравнивание xtick ярлыки.... -породившие этот беспорядок:
как это можно исправить? Подводя итог, я пытаюсь построить что-то очень простое :квадратную дендрограмму на верхнем участке и квадратную тепловую карту на нижнем участке с цветной полосой справа. ничего особенного.
наконец, более общий вопрос :существует ли общее правило/принцип, которому следует следовать, чтобы заставить matplotlib всегда делать оси квадратными? Я не могу вспомнить ни одного случая, когда мне не нужны квадратные оси, но обычно это не поведение по умолчанию. Я бы хотел, чтобы все участки были квадратными, если это возможно.