线形图介绍
箱形图(Box-plot)盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。
它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。
箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。
参数说明
boxplot( x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None):
x:指定要绘制箱线图的数据,可以是一组数据也可以是多组数据;
notch:是否以凹口的形式展现箱线图,默认非凹口;
sym:指定异常点的形状,默认为蓝色的+号显示;
vert:是否需要将箱线图垂直摆放,默认垂直摆放;
whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions:指定箱线图的位置,默认为range(1, N+1),N为箱线图的数量;
widths:指定箱线图的宽度,默认为0.5;
patch_artist:是否填充箱体的颜色,默认为False;
meanline:是否用线的形式表示均值,默认用点来表示;
showmeans:是否显示均值,默认不显示;
showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
showbox:是否显示箱线图的箱体,默认显示;
showfliers:是否显示异常值,默认显示;
boxprops:设置箱体的属性,如边框色,填充色等;
labels:为箱线图添加标签,类似于图例的作用;
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops:设置中位数的属性,如线的类型、粗细等;
meanprops:设置均值的属性,如点的大小、颜色等;
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;
manage_ticks:是否自适应标签位置,默认为True;
autorange:是否自动调整范围,默认为False;
绘制单个线形图
labels = 'A' data = [0.8685, 0.6671, 0.7971, 0.5774] plt.grid(True) # 显示网格 plt.boxplot(data, medianprops={'color': 'red', 'linewidth': '1.5'}, meanline=True, showmeans=True, meanprops={'color': 'blue', 'ls': '--', 'linewidth': '1.5'}, flierprops={"marker": "o", "markerfacecolor": "red", "markersize": 10}, labels=labels) plt.yticks(np.arange(0.4, 0.91, 0.1)) plt.show()
绘制多个线形图
labels = 'A', 'B', 'C', 'D', 'E', 'F' A = [0.4978, 0.5764, 0.5073, 0.5609] B = [0.5996, 0.65, 0.6251, 0.6473] C = [0.6015, 0.687, 0.6237, 0.6761] D = [0.5918, 0.6999, 0.6343, 0.6947] E = [0.577, 0.6932, 0.6593, 0.7036] F = [0.5637, 0.7161, 0.6683, 0.697] plt.grid(True) # 显示网格 plt.boxplot([A, B, C, D, E, F], medianprops={'color': 'red', 'linewidth': '1.5'}, meanline=True, showmeans=True, meanprops={'color': 'blue', 'ls': '--', 'linewidth': '1.5'}, flierprops={"marker": "o", "markerfacecolor": "red", "markersize": 10}, labels=labels) plt.yticks(np.arange(0.4, 0.81, 0.1)) plt.show()
模板案例
直接使用plt.boxplot(df['列名'])
groups = df.groupby('OPERATOR', as_index=False) boxes = [] # 列表(box1,box2,box3,...) boxes_label = [] for 销售员, df_销售员 in groups: # groupby得到的每一个group包含了分组的键值和被分组的数据 boxes.append(df_销售员['PRICE']) boxes_label.append(销售员) plt.figure(figsize=(15,7)) plt.boxplot(boxes,vert=False,whis=2,showmeans=True,showbox = True) # 只调用依次boxplot画多组箱型图 plt.yticks(range(1,len(boxes_label)+1),boxes_label,fontsize=15.0) plt.xticks(np.arange(0,11000,step=1000)) plt.xlabel('销售额',fontsize=15.0) plt.ylabel('销售人员',fontsize=15.0) plt.title('销售人员的销售业绩分析',fontsize=20.0) plt.show()
绘制水晶形式箱形图
plt.figure(figsize=(15,7)) plt.violinplot(boxes,vert=True,showmeans=True) # 只调用依次boxplot画多组箱型图 plt.xticks(range(1,len(boxes_label)+1),boxes_label,fontsize=15.0) plt.yticks(np.arange(0,11000,step=1000)) plt.ylabel('销售额',fontsize=15.0) plt.xlabel('销售人员',fontsize=15.0) plt.title('销售人员的销售业绩分析',fontsize=20.0) plt.show()