私は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をアップグレードすることもできます。
pip2 install matplotlib --upgrade
その後
bp = axes.boxplot(data_to_plot,showmeans=True)