在python中显示方框图中的平均值?

在python中显示方框图中的平均值?,python,boxplot,matplotlib,Python,Boxplot,Matplotlib,我是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, f

我是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'

这是一个最小的示例,可产生所需的结果:

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()
导入matplotlib.pyplot作为plt
将numpy作为np导入
数据图=np.random.rand(100,5)
位置=np.arange(5)+1
图,ax=plt.子批次(1,2,figsize=(9,4))
#matplotlib>1.4
bp=ax[0]。箱线图(数据到曲线图,位置=位置,显示平均值=真)
ax[0]。设置标题(“使用showmeans”)
#matpltolib<1.4
bp=ax[1]。箱线图(数据到曲线图,位置=位置)
平均值=[data_to_plot.T中数据的np.平均值(数据)]
ax[1]。绘图(位置,表示“rs”)
ax[1]。设置标题(“打印意味着手动打印”)
plt.show()
结果:


您还可以升级matplotlib:

 pip2 install matplotlib --upgrade
然后

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

您的代码包含几个(其他bug)。你应该在发帖前检查一下。另外,您使用的matplotlib版本是什么?我已更正了错误。我使用的是v1.4.3。你的data1和data2是什么?通过检查我的意思是执行它。有几件事您没有定义(
data1
data2
ax
)。请查看我答案中的代码是否适用于您的side@parth如果平均值要显示为一条线,请使用
bp=ax.boxplot(数据到图,平均线=True,显示平均值=True)
我使用了您的代码,但如果我不使用meanline标志,我仍然会收到关于meanline和showmeans的相同错误。您确定您使用的是matplotlib版本1.4.3吗?要了解这一点,可以执行以下操作:
import matplotlib;打印matplotlib.\uuuuu version\uuuuuu
@parthpatel我是boxplot函数的维护者,如果您实际使用的是mpl v1.4,这将起作用。@hitzg和Paul H:我很抱歉。我使用的是1.3.1版。这是一种用这个版本来表现卑鄙的方式吗?完美的答案,它也适用于seaborn软件包。哇,没想到这会起作用。我也在seaborn中使用了它,就像一个符咒。