我正在通过seaborn库sns.distplot()中的distplot为数据帧的每一列创建概率分布。对于一个情节我做
x = df['A']
sns.distplot(x);
我正在尝试使用FacetGrid&Map一次为每个列提供所有图 通过这种方式。但是根本不起作用。
g = sns.FacetGrid(df, col = 'A','B','C','D','E')
g.map(sns.distplot())
答案 0 :(得分:2)
您在两个层面上都错了。
Python语法。
FacetGrid(df, col = 'A','B','C','D','E')
无效,因为col
被设置为A
,其余字符被解释为进一步的参数。但是由于未命名,因此这是无效的python语法。
原始概念。
Seaborn希望将单个列名作为col
或row
参数的输入。这意味着数据帧必须采用一种具有一列的格式,该列确定相应数据所属的列或行。
您不调用地图要使用的函数。这个想法当然是map
本身所称的。
解决方案:
列上方的循环
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.random.randn(14,5), columns=list("ABCDE"))
fig, axes = plt.subplots(ncols=5)
for ax, col in zip(axes, df.columns):
sns.distplot(df[col], ax=ax)
plt.show()
融合数据框
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.random.randn(14,5), columns=list("ABCDE"))
g = sns.FacetGrid(df.melt(), col="variable")
g.map(sns.distplot, "value")
plt.show()
答案 1 :(得分:1)
我认为您需要使用melt
将数据框重整为长格式,请参见以下MVCE:
df = pd.DataFrame(np.random.random((100,5)), columns = list('ABCDE'))
dfm = df.melt(var_name='columns')
g = sns.FacetGrid(dfm, col='columns')
g = (g.map(sns.distplot, 'value'))
答案 2 :(得分:0)
我认为最简单的方法是只循环列并创建图。
import numpy as np
improt pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.random((100,5)), columns = list('ABCDE'))
for col in df.columns:
hist = df[col].hist(bins=10)
print("Plotting for column {}".format(col))
plt.show()
答案 3 :(得分:0)
您可以使用以下内容:
# listing dataframes types
list(set(df.dtypes.tolist()))
# include only float and integer
df_num = df.select_dtypes(include = ['float64', 'int64'])
# display what has been selected
df_num.head()
# plot
df_num.hist(figsize=(16, 20), bins=50, xlabelsize=8, ylabelsize=8);