在python的箱形图中显示平均值?

Posted

技术标签:

【中文标题】在python的箱形图中显示平均值?【英文标题】:Show mean in the box plot in python? 【发布时间】:2015-06-28 21:33:15 【问题描述】:

我是 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? 我更正了这个错误。我正在使用 v 1.4.3。 你的data1和data2是什么? 通过检查我的意思是执行它。有几件事您没有定义(data1data2ax)。请查看我的答案中的代码是否对您有用 【参考方案1】:

您也可以升级 matplotlib:

 pip2 install matplotlib --upgrade

然后

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

【讨论】:

完美的答案,它也适用于 seaborn 包。 哇,没想到这会奏效。我也在 seaborn 中使用过它,效果很好。【参考方案2】:

这是一个最小的例子,并产生了预期的结果:

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()

结果:

【讨论】:

@parth patel 如果平均值想要显示为一条线,请使用bp = ax.boxplot(data_to_plot, meanline=True, showmeans=True) 我使用了你的代码,但如果我不使用 meanline 标志,我仍然会收到关于 meanline 和 showmeans 的相同错误。 您确定您使用的是 matplotlib 1.4.3 版吗?要知道你可以这样做:import matplotlib; print matplotlib.__version__ @parthpatel 我是 boxplot 函数的维护者,如果您实际使用的是 mpl v1.4,这将起作用。 @hitzg 和 Paul H:我很抱歉。我使用的是 1.3.1 版。他们是用这个版本来表达意思的一种方式吗?

以上是关于在python的箱形图中显示平均值?的主要内容,如果未能解决你的问题,请参考以下文章

Python Matplotlib 在条形图中绘制样本均值,具有置信区间,但看起来像箱形图

R中的箱线图显示平均值

格式化在 ggplot 的箱线图中显示为文本的数字。解释箱线图外均值的定位

使用 ggplot2 将平均值添加到 R 中的分组箱形图

你如何改变熊猫箱形图Y轴的传播?

用十进制创建两组之间差距的箱形图