Ala*_*irm 5 python pandas seaborn jupyter-notebook
在探索时,我经常使用 Pandas 的 DataFrame.hist() 方法来快速显示数据框中每个数字列的直方图网格,例如:
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
data = datasets.load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df.hist(bins=50, figsize=(10,7))
plt.show()
Run Code Online (Sandbox Code Playgroud)
这会生成一个图形,其中每列都有单独的图:

我尝试过以下方法:
import pandas as pd
import seaborn as sns
from sklearn import datasets
data = datasets.load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
for col_id in df.columns:
sns.distplot(df[col_id])
Run Code Online (Sandbox Code Playgroud)
但这会产生一个只有一个图且所有列都重叠的图形:

有没有办法用 Seaborn 生成一个直方图网格来显示 DataFrame 列中的数据?
如果您使用 重新组织数据框,则可以利用 seaborn 的 FacetGrid melt。Seaborn 通常期望以这种方式组织数据(长格式)。
g = sns.FacetGrid(df.melt(), col='variable', col_wrap=2)
g.map(plt.hist, 'value')
Run Code Online (Sandbox Code Playgroud)
没有等效的,因为seaborndisplot本身只会选择一维数组或列表,也许你可以尝试生成子图。
fig, ax = plt.subplots(2, 2, figsize=(10, 10))
for i in range(ax.shape[0]):
for j in range(ax.shape[1]):
sns.distplot(df[df.columns[i*2+j]], ax=ax[i][j])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2091 次 |
| 最近记录: |