Matplotlib / Seaborn:制作一个垂直的distplot,一个barplot共享Y轴

时间:2017-12-15 14:22:54

标签: matplotlib plot seaborn subplot

我试图用两个子图(一行,两列)创建一个图,其中一个垂直的distplot和一个垂直的barplot(都来自seaborn)共享Y轴。结果应该看起来有点像不对称的小提琴情节。

条形图的数据采用以下形式:

In[8]: barplot_data[0:5]
Out[8]:
[{'time': 0, 'val': 171.19374169863295},
 {'time': 50, 'val': 2313.8459788903383},
 {'time': 100, 'val': 1518.687964071397},
 {'time': 150, 'val': 1355.8373488876694},
 {'time': 200, 'val': 1558.7682098705088}]

即,对于每个时间步骤(以50为步长),我知道条的高度。 dist图的数据形式如下:

In[9]: distplot_data[0:5]
Out[9]: [605, 477, 51, 337, 332]

即,我想要绘制分布的一系列时间点。

以下是我在右侧子图中创建条形图的方法:

barplot_df = pd.DataFrame(barplot_data)

fig, axes = plt.subplots(1, 2, sharex=False, sharey=True, squeeze=False)
left_ax = axes[0][0]
right_ax = axes[0][1]

sns.barplot(y='time', x='val',
            data=barplot_df,
            orient='h',
            ax = right_ax)

结果几乎是我想要的右侧:

Bar plot on the right side

同样,我可以将dist图放在左侧:

fig, axes = plt.subplots(1, 2, sharex=False, sharey=True, squeeze=False)
left_ax = axes[0][0]
right_ax = axes[0][1]

sns.distplot(distplot_data, ax=left_ax, vertical=True)

这也有效。我认为Y轴的方向是相反的,但无论如何都是奇怪的:

Distplot left

然而,现在我只是试图将它们绘制成相同的数字,并且它会对dist曲线造成严重破坏:

fig, axes = plt.subplots(1, 2, sharex=False, sharey=True, squeeze=False)
left_ax = axes[0][0]
right_ax = axes[0][1]

sns.barplot(y='time', x='val',
            data=barplot_df,
            orient='h',
            ax = right_ax)

sns.distplot(distplot_data, ax=left_ax, vertical=True)

Combined

我只能想象这是因为distplot的轴不知何故被扭曲了什么?有人知道这里发生了什么吗?

0 个答案:

没有答案