Seaborn的子图未对齐

时间:2016-05-18 10:49:34

标签: python matplotlib seaborn

我尝试使用相同的y轴并排生成热图和条形图。

我使用matplotlib的子图进行了很长时间,但遗憾的是这两个图表未对齐。无论我先画的是哪一个都比第一个低一点。

%pylab inline

import pandas as pd
import seaborn

d = pd.DataFrame({'names': ['foo', 'bar', 'baz', 'spam', 'eggs'],
                  'v1': pd.np.random.power(.1, 5),
                  'v2': pd.np.random.normal(size=5)})

fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True, squeeze=True)

fig.tight_layout(pad=0, h_pad=0, w_pad=0)

bar = seaborn.barplot(y='names', x='v1', data=d, ax=axes[1])
bar.set(ylabel='')
heat = seaborn.heatmap(d.set_index('names'), cbar=False, linewidths=0.1, ax=axes[0])

misaligned subplots

如果我颠倒了两个seaborn电话的顺序,情节将如下:

more misaligned subplots

我已尝试过所有内容,包括fig.subplots_adjust,但我无法正确排列这些行。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

mwaskom建议放弃sharey帮我找到解决方案。现在,我可以使用以下代码生成正确对齐的并排图,这些图仍然有效地共享相同的y轴:

%pylab inline

import pandas as pd
import seaborn

d = pd.DataFrame({'names': ['foo', 'bar', 'baz', 'spam', 'eggs'],
                  'v1': list(range(5)),
                  'v2': pd.np.random.normal(size=5)})

fig, axes = plt.subplots(nrows=1, ncols=2, squeeze=True)
fig.tight_layout(pad=0, h_pad=0, w_pad=0)
fig.subplots_adjust(wspace=0.1)

bar = seaborn.barplot(y='names', x='v1', data=d, ax=axes[1])
bar.set(ylabel='', yticks=[])
heat = seaborn.heatmap(d.set_index('names'), cbar=False, linewidths=0.1, ax=axes[0])

enter image description here