2017-09-12 65 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或任何比那更高。