如何旋转seaborn线图

时间:2019-01-30 16:21:58

标签: python pandas matplotlib seaborn

如何旋转seaborn.lineplot,使结果成为y的函数而不是x的函数。

例如,此代码:

import pandas as pd
import seaborn as sns
df = pd.DataFrame([[0,1],[0,2],[0,1.5],[1,1],[1,5]], columns=['group','val'])
sns.lineplot(x='group',y='val',data=df)

创建此图形:

enter image description here

但是有办法将图形旋转90度吗?这样,在X中,我们将具有“ val”,在Y中我们将具有“ group”,并且std从左到右而不是从下到上。

谢谢

编辑:我已经在seaborn开了张票,要求该功能:https://github.com/mwaskom/seaborn/issues/1661

2 个答案:

答案 0 :(得分:1)

根据foo["I AM BAR"]上的here,传递给lineplot的数据帧必须为

  

整齐(“长格式”)数据帧,其中每一列都是变量,每一行都是观察值。

这似乎暗示即使通过操作数据也无法强迫轴切换。如果有一种方法,我还没有找到它-我敢肯定,有一种更优雅的方法可以做到这一点,但是可以做到的一种方法是手工完成。这样的事情可以解决问题

data

这将为您提供以下情节:

seaborn docs

为简便起见,它使用每个组中的最小值和最大值来给出误差带,但是可以根据需要轻松更改为标准误差或标准偏差。

答案 1 :(得分:1)

考虑如果不使用seaborn,该怎么办。您将计算平均值和标准偏差,并将其作为组的函数进行绘制。现在很直接地将x和y交换为plot(x,y)plot(y,x)。对于填充区域,可以使用fill_betweenx代替fill_between

下面两种情况进行比较。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame([[0,1],[0,2],[0,1.5],[1,1],[1,5]], columns=['group','val'])

mean = df.groupby("group").mean()
std = df.groupby("group").std()

fig, (ax, ax2) = plt.subplots(ncols=2)

ax.plot(mean.index, mean["val"].values)
ax.fill_between(mean.index, (mean-std)["val"].values, (mean+std)["val"].values, alpha=.5)
ax.set(xlabel="group", ylabel="val")

ax2.plot(mean["val"].values, mean.index)
ax2.fill_betweenx(mean.index, (mean-std)["val"].values, (mean+std)["val"].values, alpha=.5)
ax2.set(ylabel="group", xlabel="val")

fig.tight_layout()
plt.show()

enter image description here