pandas 数据框中每列的 Seaborn 图?
Seaborn plot per column in a pandas dataframe?
我有一个看起来有点像这样的小数据框:
csv = [{"Oranges" : 12, "Apples" : 4, "Kiwis" : "Yes"}, {"Oranges" : 1, "Apples" : 8, "Kiwis" : "No"}, {"Oranges" : 1, "Apples" : 14, "Kiwis" : "Yes"}, {"Oranges" : 11, "Apples" : 3, "Kiwis" : "No"}, ]
df = pd.DataFrame(csv)
只是,它的cols多了很多。我想为每列绘制一个 seaborn 小提琴图。如果我手动创建每列图,它看起来有点像这样:
sns.violinplot(y="Oranges", x="Kiwis", data=df, split=True, inner="quart")
sns.violinplot(y="Apples", x="Kiwis", data=df, split=True, inner="quart")
但是,如果有大约 100 列,我想逐列循环遍历数据帧。
我尝试构建一个如下所示的小函数:
def violin(col):
sns.violinplot(y=col, x="Kiwis", data=df, split=True, inner="quart")
我的想法是使用 apply()
将它用于每一列...但到目前为止它还没有用。有什么想法吗?
您可以对 Kiwis
列使用 difference
,然后使用 apply
按子集选择列 []
:
import matplotlib.pyplot as plt
def violin(col):
sns.violinplot(y=col, x="Kiwis", data=df, split=True, inner="quart")
plt.figure()
cols = df.columns.difference(['Kiwis'])
df[cols].apply(violin)
我认为你只需要稍微重新格式化你的数据框,然后你就可以在一次调用中完成整个情节:
df = pd.melt(df, "Kiwis", var_name="Fruit", value_name="Value")
让事情看起来像
Kiwis Fruit Value
0 Yes Apples 4
1 No Apples 8
2 Yes Apples 14
3 No Apples 3
4 Yes Oranges 12
5 No Oranges 1
6 Yes Oranges 1
7 No Oranges 11
这很容易绘制
sns.violinplot(x="Fruit", y="Value", hue="Kiwis", data=df,
split=True, inner="quart")
我有一个看起来有点像这样的小数据框:
csv = [{"Oranges" : 12, "Apples" : 4, "Kiwis" : "Yes"}, {"Oranges" : 1, "Apples" : 8, "Kiwis" : "No"}, {"Oranges" : 1, "Apples" : 14, "Kiwis" : "Yes"}, {"Oranges" : 11, "Apples" : 3, "Kiwis" : "No"}, ]
df = pd.DataFrame(csv)
只是,它的cols多了很多。我想为每列绘制一个 seaborn 小提琴图。如果我手动创建每列图,它看起来有点像这样:
sns.violinplot(y="Oranges", x="Kiwis", data=df, split=True, inner="quart")
sns.violinplot(y="Apples", x="Kiwis", data=df, split=True, inner="quart")
但是,如果有大约 100 列,我想逐列循环遍历数据帧。
我尝试构建一个如下所示的小函数:
def violin(col):
sns.violinplot(y=col, x="Kiwis", data=df, split=True, inner="quart")
我的想法是使用 apply()
将它用于每一列...但到目前为止它还没有用。有什么想法吗?
您可以对 Kiwis
列使用 difference
,然后使用 apply
按子集选择列 []
:
import matplotlib.pyplot as plt
def violin(col):
sns.violinplot(y=col, x="Kiwis", data=df, split=True, inner="quart")
plt.figure()
cols = df.columns.difference(['Kiwis'])
df[cols].apply(violin)
我认为你只需要稍微重新格式化你的数据框,然后你就可以在一次调用中完成整个情节:
df = pd.melt(df, "Kiwis", var_name="Fruit", value_name="Value")
让事情看起来像
Kiwis Fruit Value
0 Yes Apples 4
1 No Apples 8
2 Yes Apples 14
3 No Apples 3
4 Yes Oranges 12
5 No Oranges 1
6 Yes Oranges 1
7 No Oranges 11
这很容易绘制
sns.violinplot(x="Fruit", y="Value", hue="Kiwis", data=df,
split=True, inner="quart")