python怎么画箱线图?Matplotlib数据可视化006:
前文回看:
【Python菜鸟进阶大神】Matplotlib数据可视化001:基础API汇总&散点图
【Python菜鸟进阶大神】Matplotlib数据可视化002:折线图
【Python菜鸟进阶大神】Matplotlib数据可视化003:条形图
【Python菜鸟进阶大神】Matplotlib数据可视化004:饼图
【Python菜鸟进阶大神】Matplotlib数据可视化005:直方图
箱线图又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。
箱线图API:
plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=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)
x:指定要绘制箱线图的数据;
notch:是否是凹口的形式展现箱线图,默认非凹口;
sym:指定异常点的形状,默认为+号显示;
vert:是否需要将箱线图垂直摆放,默认垂直摆放;
whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions:指定箱线图的位置,默认为[0,1,2…];
widths:指定箱线图的宽度,默认为0.5;
patch_artist:是否填充箱体的颜色;
meanline:是否用线的形式表示均值,默认用点来表示;
showmeans:是否显示均值,默认不显示;
showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
showbox:是否显示箱线图的箱体,默认显示;
showfliers:是否显示异常值,默认显示;
boxprops:设置箱体的属性,如边框色,填充色等;
labels:为箱线图添加标签,类似于图例的作用;
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops:设置中位数的属性,如线的类型、粗细等;
meanprops:设置均值的属性,如点的大小、颜色等;
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;
# 引入模块
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
# 中文乱码和坐标轴负号的处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# 加载数据
path="C:/Users/Administrator/Desktop/exercise_data/train.csv"
df=pd.read_csv(path)
df.head()
# 将缺失值删除
df.dropna(subset=["Age"],inplace=True)
# 画图
plt.boxplot(x=df.Age,
patch_artist=True, # 要求用自定义颜色填充盒形图,默认白色填充
showmeans=True, # 以点的形式显示均值
boxprops = {'color':'black','facecolor':'blue'}, # 设置箱体属性,填充色和边框色
flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 设置异常值属性,点的形状、填充色和边框色
meanprops = {'marker':'*','markerfacecolor':'y','markersize':'12'}, # 设置均值点的属性,点的形状、填充色
medianprops = {'linestyle':'--','color':'orange'}) # 设置中位数线的属性,线的类型和颜色)
plt.xlabel("年龄",fontdict={'fontsize':12, 'color':'k'})
plt.title("泰坦尼克号乘客年龄箱线图",fontdict={'fontsize':'18', 'color':'k'})
箱线图四分位数:
将n个数从小到大排序,下四分位数是四分之一位置对应的数,一次类推:
下四分位:Q1=(n+1)/4
中分位:Q2=(n+1)/2
上四分位:Q3=3*(n+1)/4
四分位距:IQR=Q3-Q1
下界:Q1-1.5IQR
上界:Q3+1.5IQR
定义超出上界或者下界的数据解释离群值或者异常值。
将乘客年龄按照仓位划分
# 按舱级排序,为了后面正常显示分组盒形图的顺序
df.sort_values(by = 'Pclass', inplace=True)
# 通过for循环将不同仓位的年龄人群分别存储到列表Age变量中
Age = []
Levels = df.Pclass.unique()
for Pclass in Levels:
Age.append(df.loc[df.Pclass==Pclass,'Age'])
# 绘图
plt.boxplot(x=Age,
patch_artist=True, # 要求用自定义颜色填充盒形图,默认白色填充
labels = ['一等舱','二等舱','三等舱'], # 添加具体的标签名称
showmeans=True, # 以点的形式显示均值
boxprops = {'color':'black','facecolor':'blue'}, # 设置箱体属性,填充色和边框色
flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 设置异常值属性,点的形状、填充色和边框色
meanprops = {'marker':'*','markerfacecolor':'y','markersize':'12'}, # 设置均值点的属性,点的形状、填充色
medianprops = {'linestyle':'--','color':'orange'}) # 设置中位数线的属性,线的类型和颜色)
plt.ylabel("年龄",fontdict={'fontsize':12, 'color':'k'})
plt.title("泰坦尼克号乘客年龄箱线图",fontdict={'fontsize':'18', 'color':'k'})
# 显示图形
plt.show()
由上图可知,舱位等级越高的乘客,他们的年龄越高,三种舱位的平均年龄为38、30和25,说明年龄越是偏大一点,他们的经济能力会越强一些,所买的舱位等级可能就会越高一些。同时,在二等舱和三等舱内,乘客的年龄上存在一些异常用户。
原文,在本人公众号,链接:
https://mp.weixin.qq.com/s/4A4drHs02UIMfc7Ft7LBtg