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

par*_*tel 9 python matplotlib boxplot

我是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**)
Run Code Online (Sandbox Code Playgroud)

即使我有showmean标志,它给我以下错误.

TypeError: boxplot() got an unexpected keyword argument 'showmeans'
Run Code Online (Sandbox Code Playgroud)

hit*_*tzg 23

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

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()
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你想用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()
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

  • @parth patel如果平均值想显示为一行,请使用`bp = ax.boxplot(data_to_plot,meanline = True,showmeans = True) (3认同)

Nar*_*oTv 6

您还可以升级 matplotlib:

 pip2 install matplotlib --upgrade
Run Code Online (Sandbox Code Playgroud)

进而

bp = axes.boxplot(data_to_plot,showmeans=True)
Run Code Online (Sandbox Code Playgroud)

  • 完美的答案,它也适用于 seaborn 包。 (2认同)