plt.boxplot()返回一个字典,其中键fliers包含作为line2d对象的上下传单。您可以在这样绘制之前操纵它们:
仅在matplotlib上>;=1.4.0bp = plt.boxplot(data, whis=[5, 95], showfliers=True)
# Get a list of Line2D objects, representing a single line from the
# minimum to the maximum flier points.
fliers = bp['fliers']
# Iterate over it!
for fly in fliers:
fdata = fly.get_data()
fly.set_data([fdata[0][0],fdata[0][-1]],[fdata[1][0],fdata[1][-1]])
在旧版本上
如果您使用的是旧版本的matplotlib,则每个boxplot的fliers都用两行而不是一行表示。因此,循环看起来像这样:import numpy as np
for i in range(len(fliers)):
fdata = fliers[i].get_data()
# Get the index of the maximum y in data if
# i is 0 or even, else get index of minimum y.
if i%2 == 0:
id = np.where(fdata[1] == fdata[1].max())[0][0]
else:
id = np.where(fdata[1] == fdata[1].min())[0][0]
fliers[i].set_data([fdata[0][id], fdata[1][id]])
还要注意,showfliers参数在matplotlib<;1.4x中不存在,whisk参数不接受列表。
当然(对于简单的应用程序),您可以在没有传单的情况下绘制boxplot,并将max和min点添加到绘图中:bp = plt.boxplot(data, whis=[5, 95], showfliers=False)
sc = plt.scatter([1, 1], [data.min(), data.max()])
其中[1, 1]是点的x位置。