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

noe*_*ich 4 python boxplot dataframe subplot seaborn

我试图在子图中显示与数据框df中每列相对应的所有箱线图

我已阅读这个问题: Subplot for seaborn boxplot 并尝试实现给定的解决方案:

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
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到一个错误

---------------------------------------------------------------------------
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'
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢。

War*_*ser 9

问题来自于传递ax=axes[y]boxplot. axes是一个形状为 (2, 3) 的二维 numpy 数组,其中包含您请求的 Matplotlib 轴网格。axes[y]包含三个 Matplotlib 对象的一维 numpy 数组也是如此AxesSubplot。我怀疑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()
Run Code Online (Sandbox Code Playgroud)

剧情:

阴谋