【发布时间】:2012-08-07 06:26:59
【问题描述】:
我正在尝试制作一个简单的子图,其中一个子图中的树状图和另一个子图中的热图,同时保持方轴。我尝试以下方法:
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()
这会产生以下结果:
但问题是轴不是方形的,并且颜色条被认为是第二个子图的一部分。我希望它挂在绘图之外,并使其树状图框和热图框都是方形的并且彼此对齐(即相同大小。)
我尝试在调用subplot 时使用aspect='equal' 来获取方轴,正如文档所建议的那样,但这破坏了情节,给出了这个......
如果我尝试在每个子图之后使用 plt.axis('equal') 而不是 aspect='equal',它奇怪地平方热图而不是它的边界框(见下文),同时完全破坏树状图并弄乱 xtick 标签的对齐方式.... - 造成这种混乱:
如何解决这个问题?总而言之,我试图绘制一些非常简单的东西:顶部子图中的方形树状图,底部子图中的方形热图,右侧有颜色条。没什么花哨的。
最后,更一般的问题:是否有一个一般规则/原则可以遵循强制 matplotlib总是使轴成正方形?我想不出一个我不想要方轴的情况,但这通常不是默认行为。如果可能的话,我想强制所有地块都是正方形的。
【问题讨论】:
标签: python numpy matplotlib scipy