使用Seaborn,我可以在同一图上创建一个pandas DataFrame的多列的箱线图。我想对传单(离群值)应用自定义样式,例如设置标记符号,颜色和标记大小。

但是,The API documentation on seaborn.boxplot仅提供了一个参数fliersize,它使我可以控制传单的大小,但不能控制颜色和符号。

由于Seaborn使用matplotlib进行绘图,因此我想可以为boxplot函数提供一个matplotlib样式字典,如下所示:

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

# create a dataframe
df = pd.DataFrame({'column_a': [3, 6, 200, 100, 7], 'column_b': [1, 8, 4, 150, 290], 'column_c': [6, 7, 20, 80, 275]})

# set figure size
sns.set(rc={"figure.figsize": (14, 6)})

# define outlier properties
flierprops = dict(marker='o', markersize=5)

# create boxplot
ax = sns.boxplot(df, vert=False, showmeans=True, flierprops=flierprops)
plt.show()

结果:

根据提供的字典,我希望有一个大的红色圆圈代表column_c的传单,但仍然使用标准设置。

直接使用matplotlib时使用This thread describes a similar problem-但是,根据讨论,我猜测在使用最新版本的matplotlib时应修复此问题。

我使用iPython笔记本(iPython 3.10),matplotlib 1.4.3和seaborn 0.5.1。进行了尝试。

最佳答案

Seaborn的boxplot代码将忽略您的flierprops参数,并在将参数传递给Matplotlib之前用它自己的参数覆盖。 Matplotlib的boxplot还将返回所有flier对象作为其返回值的一部分,因此您可以在运行boxplot后修改此对象,但Seaborn不会返回此对象。

覆盖flierprops(和sym)似乎是一个错误,所以我看看是否可以解决:请参见this issue。同时,您可能要考虑使用matplotlib的boxplot代替。查看seaborn的代码可能很有用(boxplot位于distributions.py中)。

更新:现在有一个拉取请求可以解决此问题(flierprops和其他*props,但不是sym)

关于python - 在Seaborn boxplot中设置传单(离群值)样式会被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29647145/

10-12 23:57