我试图在一个子图和另一个热图中制作一个简单的子图,同时保持方形轴。我尝试以下方法:如何在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()
这会产生以下:
,但问题是,轴不垂直,而彩条被认为是第二次要情节的一部分。我希望它挂在剧情外面,并使之成为树状图框和热图框都是方形的并且彼此对齐(即相同的尺寸)。
我尝试使用aspect='equal'
来获取方形轴时调用subplot
如文档建议,但是这破坏了剧情,让这...
,如果我尝试每一个插曲,而不是aspect='equal'
后使用plt.axis('equal')
,它奇怪的广场热图,但不是它的边框(见下文),同时完全破坏树形图,并搞乱了xtick标签的对齐。 - 从而引发这个烂摊子:
这可怎么固定?总结一下,我试图绘制一些非常简单的东西:顶部子图中的方形树状图,以及底部子图中的方形热图,右边的颜色条。没有什么花哨。
终于,更一般的问题:是否有一个通用规则/原则遵循强制matplotlib到总是使轴线方形?我不能想到一个我不想要方形轴的情况,但它通常不是默认行为。如果可能的话,我想强制所有地块平方。
感谢您的答案,但你的情节仍然不像常规小情节对齐。顶部和底部的边界框未对齐。我希望它们能够垂直对齐,并且颜色背向右侧,有点像你拥有它,但没有错位。对此有何想法? – user248237dfsf 2012-08-10 01:55:33
我编辑了答案,请检查它。 – HYRY 2012-08-10 03:03:20
感谢您的回答 - 这正是正确的输出,但代码看起来非常复杂!有更容易的方法吗?似乎你必须成为matplotlib开发人员之一才能知道如何写这样的东西,只是为了让颜色条排列起来... – user248237dfsf 2012-08-10 03:50:45