在箱线图中显示均值

26

我对Matplotlib不熟悉,学习如何在Python中绘制箱线图时,我想知道是否有一种方法可以在箱线图中显示均值? 以下是我的代码...

from pylab import *
import matplotlib.pyplot as plt
data1=np.random.rand(100,1)
data2=np.random.rand(100,1)
data_to_plot=[data1,data2]
#Create a figure instance
fig = plt.figure(1, figsize=(9, 6))
# Create an axes instance
axes = fig.add_subplot(111)    
# Create the boxplot
bp = axes.boxplot(data_to_plot,**showmeans=True**)

尽管我已经打开了showmean标志,但它仍然给出以下错误。

TypeError: boxplot() got an unexpected keyword argument 'showmeans'

你的代码包含了一些(其他的)错误。在发布之前,你应该总是进行检查。另外,你使用的matplotlib版本是什么? - hitzg
我纠正了这个错误。我正在使用 v 1.4.3 版本。 - parth patel
你的 data1 和 data2 是什么? - pyan
1
通过检查我指的是执行它。有几件事情你没有定义(data1data2ax)。请看看我回答中的代码在你这边是否可行。 - hitzg
2个回答

44

这是一个简单的示例,可以产生所需的结果:

import matplotlib.pyplot as plt
import numpy as np

data_to_plot = np.random.rand(100,5)

fig = plt.figure(1, figsize=(9, 6))
ax = fig.add_subplot(111)    
bp = ax.boxplot(data_to_plot, showmeans=True)

plt.show()

编辑:

如果您想在matplotlib版本1.3.1下达到相同的效果,则需要手动绘制均值。以下是如何执行的示例:

import matplotlib.pyplot as plt
import numpy as np

data_to_plot = np.random.rand(100,5)
positions = np.arange(5) + 1

fig, ax = plt.subplots(1,2, figsize=(9,4))

# matplotlib > 1.4
bp = ax[0].boxplot(data_to_plot, positions=positions, showmeans=True)
ax[0].set_title("Using showmeans")

#matpltolib < 1.4
bp = ax[1].boxplot(data_to_plot, positions=positions)
means = [np.mean(data) for data in data_to_plot.T]
ax[1].plot(positions, means, 'rs')
ax[1].set_title("Plotting means manually")

plt.show()

结果:

此处插入图片描述


3
如果要将均值以线条形式显示,请使用bp = ax.boxplot(data_to_plot, meanline=True, showmeans=True) - pyan
我使用了你的代码,但如果我不使用meanline标志,仍然会出现关于meanline和showmeans的相同错误。 - parth patel
你确定你正在使用 matplotlib 版本 1.4.3 吗?要找出来,你可以这样做:import matplotlib; print matplotlib.__version__ - hitzg
1
@parthpatel 我是箱线图函数的维护者,如果你真的在使用mpl v1.4,这将会起作用。 - Paul H
@hitzg和Paul H:我道歉。我正在使用1.3.1版本。这个版本有显示平均值的方法吗? - parth patel
@parthpatel:如果您想了解如何在1.3.1中完成此操作,我可以提供一个示例。 - hitzg

8
你也可以升级matplotlib:
 pip2 install matplotlib --upgrade

然后

bp = axes.boxplot(data_to_plot,showmeans=True)

2
完美的答案,它也适用于seaborn包。 - pceccon
1
哇,没想到这个能正常工作。我还在seaborn中使用它,效果非常好。 - Tom Wojcik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接