数据框中所有数据的箱线图:错误“'numpy.ndarray' 对象没有属性 'boxplot'”

boxplot for all data in dataframe: error "'numpy.ndarray' object has no attribute 'boxplot'"

我试图在 子图 中显示所有 boxplots 对应于我的 dataframe df.

我看过这个问题: 并尝试实施给定的解决方案:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

d = {'col1': [1, 2, 5.5, 100], 'col2': [3, 4, 0.2, 3], 'col3': [1, 4, 6, 30], 'col4': [2, 24, 0.2, 13], 'col5': [9, 84, 0.9, 3]}
df = pd.DataFrame(data=d)

names = list(df.columns)
f, axes = plt.subplots(round(len(names)/3), 3)  
y = 0;
for name in names:
    sns.boxplot(x= df[name], ax=axes[y])
    y = y + 1

不幸的是我得到一个错误

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-111-489a538377fc> in <module>
      3 y = 0;
      4 for name in names:
----> 5     sns.boxplot(x= df[name], ax=axes[y])
      6     y = y + 1
AttributeError: 'numpy.ndarray' object has no attribute 'boxplot'

我知道 df[name] 有问题,但我不知道如何解决它。

有人能给我指出正确的方向吗?

非常感谢。

问题来自将 ax=axes[y] 传递给 boxplotaxes 是一个形状为 (2, 3) 的二维 numpy 数组,其中包含您请求的 Matplotlib 坐标轴网格。所以 axes[y] 是一个包含三个 Matplotlib AxesSubplot 对象的一维 numpy 数组。我怀疑 boxplot 正试图分派给这个参数,它希望它是一个具有 boxplot 方法的对象。您可以通过使用您要使用的适当行和列索引 axes 来解决此问题。

这是您的脚本,稍作改动:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

d = {'col1': [1, 2, 5.5, 100], 'col2': [3, 4, 0.2, 3], 'col3': [1, 4, 6, 30], 'col4': [2, 24, 0.2, 13], 'col5': [9, 84, 0.9, 3]}
df = pd.DataFrame(data=d)

names = list(df.columns)
f, axes = plt.subplots(round(len(names)/3), 3)  
y = 0;
for name in names:
    i, j = divmod(y, 3)
    sns.boxplot(x=df[name], ax=axes[i, j])
    y = y + 1

plt.tight_layout()
plt.show()

剧情: