我想在大约10个变量上创建一个箱形图,其中每个变量内仅考虑正值。这会随着变量的变化而变化,因此,在一个类别中为0的东西在另一个类别中可能为正。
到目前为止,对于一个变量执行此操作似乎是这样;
ax=sns.boxplot(data=[df['Category_1_value'][df['Category_1_value'] > 0]])
我可以做10次以上,但希望有一种更简单的方法。
是否有一个简单的选项可以忽略每个类别中的0个值?
答案 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()