Matplotlib框图传单没有显示

时间:2015-03-06 21:30:35

标签: python matplotlib boxplot seaborn

我想知道Matplotlib的盒子情节传单是否有问题?

我将此示例复制粘贴到python脚本中: http://blog.bharatbhole.com/creating-boxplots-with-matplotlib/

...但是盒子图传单(异常值)没有显示。有谁知道为什么我可能不会看到它们?对不起,如果这是一个愚蠢的问题,但我不能为我的生活弄清楚它为什么不起作用。

## Create data
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)

## combine these different collections into a list    
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]

# Create a figure instance
fig = plt.figure(1, figsize=(9, 6))

# Create an axes instance
ax = fig.add_subplot(111)

# Create the boxplot
bp = ax.boxplot(data_to_plot)

我还尝试将showfliers=True添加到该脚本的最后一行,但它仍无效。

这是我作为输出得到的:

enter image description here

2 个答案:

答案 0 :(得分:32)

从你的情节看,你似乎已经导入了seaborn模块。导入seaborn时,即使显式启用了传单,也会显示issue matplotlib boxplot传单。当未导入seaborn时,您的代码似乎正常工作:

Boxplot with fliers, no seaborn

导入seaborn时,您可以执行以下操作:

解决方案1:

假设您已经导入了这样的seaborn:

import seaborn as sns

你可以使用seaborn boxplot功能:

sns.boxplot(data_to_plot, ax=ax)

导致:

Seaborn boxplot with fliers

解决方案2:

如果您想继续使用matplotlib boxplot函数(来自Automatic (whisker-sensitive) ylim in boxplots):

ax.boxplot(data_to_plot, sym='k.')

导致:

Matplotlib boxplot with fliers

答案 1 :(得分:2)

如果飞行器标记设置为None,您可能看不到传单。 page you linked to有一个for flier in bp['fliers']:循环,用于设置飞行标记样式,颜色和alpha:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)

## combine these different collections into a list    
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]

# Create a figure instance
fig = plt.figure(1, figsize=(9, 6))

# Create an axes instance
ax = fig.add_subplot(111)

# Create the boxplot
bp = ax.boxplot(data_to_plot, showfliers=True)

for flier in bp['fliers']:
    flier.set(marker='o', color='#e7298a', alpha=0.5)

plt.show()

产量

enter image description here