Я пытаюсь сделать простой подзаговор с дендрограммой в одном подзаголовке и тепловой карте в другом, сохраняя квадратные оси. Я пробую следующее:
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 всегда делать оси квадратными? Я не могу придумать ни одного случая, когда мне не нужны квадратные оси, но обычно это не поведение по умолчанию. Я бы хотел, чтобы все графики были квадратными, если это возможно.