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)
不幸的是我收到一个错误
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'
我知道存在问题,df[name]但我不知道如何解决它。
有人能指出我正确的方向吗?
非常感谢。
问题来自于传递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)
剧情: