2017-09-12 67 views
0

我想显示填充了颜色的箱形图,并且还允许我在其上显示一个点(每个数据集的平均值)。matplotlib:填充箱形图和点显示

到现在为止我只succeded上显示它们的平均分的空白条:

import numpy as np 
import pandas as pdK 
import matplotlib.pyplot as plt 
from matplotlib import rcParams 
%matplotlib inline 

X = np.random.rand(20) 
Y = np.random.rand(20) 
Z = np.random.rand(20) 
X_ave=np.mean(X) 
Y_ave=np.mean(X) 
Z_ave=np.mean(X) 
plt.boxplot([X,Y,Z], patch_artist=False) 
plt.plot(1, X_ave,'*', markersize=15) 
plt.plot(2, Y_ave,'*', markersize=15) 
plt.plot(3, Y_ave,'*', markersize=15) 
#plt.boxplot(box_plot_data) 
plt.show() 

unfilled_boxPlots

一旦我通过设置patch_artist =真填补框图,该平均值重写由箱子的颜色和不再显示。

X = np.random.rand(20) 
Y = np.random.rand(20) 
Z = np.random.rand(20) 
X_ave=np.mean(X) 
Y_ave=np.mean(X) 
Z_ave=np.mean(X) 
plt.plot(1, X_ave,'*', markersize=15) 
plt.plot(2, Y_ave,'*', markersize=15) 
plt.plot(3, Y_ave,'*', markersize=15) 
plt.boxplot([X,Y,Z], patch_artist=True) 
#plt.boxplot(box_plot_data) 
plt.show() 

filled_boxPlots

回答

2

平均标记隐藏在箱线图的背后箱。与标记相比,将背景放置在背景中会再次显示它们。最简单的方法是为箱线图指定zorder

plt.boxplot([X,Y,Z], patch_artist=True, zorder=1) 

完整的示例:

import numpy as np 
import pandas as pdK 
import matplotlib.pyplot as plt 

X = np.random.rand(20) 
Y = np.random.rand(20) 
Z = np.random.rand(20) 
X_ave=np.mean(X) 
Y_ave=np.mean(X) 
Z_ave=np.mean(X) 
plt.boxplot([X,Y,Z], patch_artist=True, boxprops=dict(facecolor="purple"), zorder=1) 
plt.plot(1, X_ave,'*', markersize=15) 
plt.plot(2, Y_ave,'*', markersize=15) 
plt.plot(3, Y_ave,'*', markersize=15) 

plt.show() 

enter image description here

当然,你可以另外指定的zorder为标记地块是3或任何比那更高。