如何在Seaborn中仅对正值创建箱线图?

时间:2018-10-29 15:55:21

标签: python seaborn boxplot

我想在大约10个变量上创建一个箱形图,其中每个变量内仅考虑正值。这会随着变量的变化而变化,因此,在一个类别中为0的东西在另一个类别中可能为正。

到目前为止,对于一个变量执行此操作似乎是这样;

ax=sns.boxplot(data=[df['Category_1_value'][df['Category_1_value'] > 0]])

我可以做10次以上,但希望有一种更简单的方法。

是否有一个简单的选项可以忽略每个类别中的0个值?

1 个答案:

答案 0 :(得分:2)

在绘制之前,请考虑用np.nan替换所有负值:

df[df < 0] = np.nan

fig, ax = plt.subplots(figsize=(10,4))
sns.boxplot(data=df, ax=ax)

plt.show()
plt.clf()
plt.close()

使用随机种子数据进行演示。

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

np.random.seed(102918)    
df = pd.DataFrame(np.random.randn(100, 5))
df.columns = ['Category_'+ str(i) +'_value' for i in range(1, 6)]

print(df.head(5)
#    Category_1_value  Category_2_value  Category_3_value  Category_4_value  Category_5_value
# 0         -0.911648         -0.453908         -0.495518          0.733304          0.569576
# 1          0.780117         -0.079954          0.134944         -1.764539         -0.267812
# 2         -0.256881          0.470838          0.437137          1.295758          0.385070
# 3         -1.665858         -1.001672         -0.444930          0.758346          0.132343
# 4         -0.167982          1.033756          1.636315          0.458918          0.022343

df[df < 0] = np.nan

print(df.head(5))
#    Category_1_value  Category_2_value  Category_3_value  Category_4_value  Category_5_value
# 0               NaN               NaN               NaN          0.733304          0.569576
# 1          0.780117               NaN          0.134944               NaN               NaN
# 2               NaN          0.470838          0.437137          1.295758          0.385070
# 3               NaN               NaN               NaN          0.758346          0.132343
# 4               NaN          1.033756          1.636315          0.458918          0.022343

情节

fig, ax = plt.subplots(figsize=(10,4))
sns.boxplot(data=df, ax=ax)

plt.show()
plt.clf()
plt.close()

Plot Output