箱线图是另一种体现数据分布的图形,通过该图可以得知数据的下须值(Q1-1.5IQR)、下四分位数(Q1)、中位数(Q2)、均值、上四分位数(Q3)和上须值(Q3+1.5IQR),更重要的是,箱线图还可以发现数据中的异常点
箱线图的绘制仍然可以通过matplotlib模块、pandas模块和seaborn模块完成,下面将一一介绍各模块绘制条形图的过程。

1.matplotlib模块

首先介绍一下matplotlib模块中绘制箱线图的boxplot函数,有关该函数的语法和参数含义如下:

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:bool类型参数,是否填充箱体的颜色;默认为False。
  • meanline:bool类型参数,是否用线的形式表示均值,默认为False。
  • showmeans:bool类型参数,是否显示均值,默认为False。
  • showcaps:bool类型参数,是否显示箱线图顶端和末端的两条线(即上下须),默认为True。
  • showbox:bool类型参数,是否显示箱线图的箱体,默认为True。
  • showfliers:是否显示异常值,默认为True。
  • boxprops:设置箱体的属性,如边框色,填充色等。
  • labels:为箱线图添加标签,类似于图例的作用。
  • filerprops:设置异常值的属性,如异常点的形状、大小、填充色等。
  • medianprops:设置中位数的属性,如线的类型、粗细等。
  • meanprops:设置均值的属性,如点的大小、颜色等。
  • capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等。
  • whiskerprops:设置须的属性,如颜色、粗细、线的类型等。
    现在,以某平台二手房数据为例,运用箱线图探究其二手房单价的分布情况:

    具体代码如下:
import pandas as pd
import matplotlib.pyplot as plt# 读入数据
Sec_Buildings = pd.read_excel(r'不同行政区域的二手房信息.xlsx')
#设置绘图风格
plt.style.use('ggplot')
#处理中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
#坐标轴负号的处理
plt.rcParams['axes.unicode_minus']=False# 绘制箱线图
plt.boxplot(x = Sec_Buildings.price_unit, # 指定绘图数据patch_artist=True, # 要求用自定义颜色填充盒形图,默认白色填充showmeans=True, # 以点的形式显示均值boxprops = {'color':'black','facecolor':'steelblue'}, # 设置箱体属性,如边框色和填充色# 设置异常点属性,如点的形状、填充色和点的大小flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':3},# 设置均值点的属性,如点的形状、填充色和点的大小meanprops = {'marker':'D','markerfacecolor':'blue', 'markersize':4},# 设置中位数线的属性,如线的类型和颜色medianprops = {'linestyle':'--','color':'orange'},labels = [''] # 删除x轴的刻度标签,否则图形显示刻度标签为1)
# 添加图形标题
plt.title('二手房单价分布的箱线图')
# 显示图形
plt.show()


如上图所示,图中的上下两条横线代表上下须、箱体的上下两条横线代表上下四分位数、箱体中的虚线代表中位数、箱体中的点则为均值、上下须两端的点代表异常值。通过图中均值和中位数的对比就可以得知数据微微右偏(判断标准:如果数据近似正态分布,则众数=中位数=均值;如果数据右偏,则众数<中位数<均值;如果数值左偏,则众数>中位数>均值)。 如上绘制的是二手房整体单价的箱线图,这样的箱线图可能并不常见,更多的是分组箱线图,即二手房的单价按照其他分组变量(如行政区域、楼层、朝向等)进行对比分析。下面继续使用matplotlib模块对二手房的单价绘制分组箱线图,代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 读入数据
Sec_Buildings = pd.read_excel(r'不同行政区域的二手房信息.xlsx')
#设置绘图风格
plt.style.use('ggplot')
#处理中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
#坐标轴负号的处理
plt.rcParams['axes.unicode_minus']=False# 二手房在各行政区域的平均单价
group_region = Sec_Buildings.groupby('region')
avg_price = group_region.aggregate({'price_unit':np.mean}).sort_values('price_unit', ascending = False)
# print(avg_price)
# print(avg_price.index)
# 通过循环,将不同行政区域的二手房存储到列表中
region_price = []
for region in avg_price.index:region_price.append(Sec_Buildings.price_unit[Sec_Buildings.region == region])
# 绘制分组箱线图
plt.boxplot(x = region_price,  # 指定绘图数据patch_artist=True,  # 要求用自定义颜色填充盒形图,默认白色填充labels = avg_price.index, # 添加x轴的刻度标签showmeans=True,  # 以点的形式显示均值boxprops = {'color':'black', 'facecolor':'steelblue'},  # 设置箱体属性,如边框色和填充色flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':3},  # 设置异常点属性,如点的形状、填充色和点的大小meanprops = {'marker':'D','markerfacecolor':'blue', 'markersize':4},  # 设置均值点的属性,如点的形状、填充色和点的大小medianprops = {'linestyle':'--','color':'orange'}  # 设置中位数线的属性,如线的类型和颜色)
# 添加y轴标签
plt.ylabel('单价(元)')
# 添加标题
plt.title('不同行政区域的二手房单价对比')
# 显示图形
plt.show()

print(avg_price)
print(avg_price.index)

          price_unit
region
静安      92920.466667
黄浦      88764.663220
徐汇      75758.458631
长宁      70295.307244
虹口      67264.039347
杨浦      65549.499725
闸北      64985.371483
普陀      60977.385854
浦东      60513.039575
闵行      53667.534058
宝山      49971.513572
松江      41779.174870
嘉定      41596.720917
青浦      39349.514793
奉贤      30576.963314
金山      22521.181818
崇明      19181.250000
Index(['静安', '黄浦', '徐汇', '长宁', '虹口', '杨浦', '闸北', '普陀', '浦东', '闵行', '宝山', '松江','嘉定', '青浦', '奉贤', '金山', '崇明'],dtype='object', name='region')


应用matplotlib模块绘制如上所示的分组箱线图会相对烦琐一些,由于boxplot函数每次只能绘制一个箱线图,为了能够实现多个箱线图的绘制,对数据稍微做了一些变动,即将每个行政区域下的二手房单价汇总到一个列表中,然后基于这个大列表应用boxplot函数。在绘图过程中,首先做了一个“手脚”,那就是统计各行政区域二手房的平均单价,并降序排序,这样做的目的就是让分组箱线图能够降序呈现。
虽然pandas模块中的plot方法可以绘制分组箱线图,但是该方法是基于数据框执行的,并且数据框的每一列对应一个箱线图。对于二手房数据集来说,应用plot方法绘制分组箱线图不太合适,因为每一个行政区的二手房数量不一致,将导致无法重构一个新的数据框用于绘图。

2.seaborn模块

如果读者觉得matplotlib模块绘制分组箱线图比较麻烦,可以使用seaborn模块中的boxplot函数。下面不妨先了解一下该函数的参数含义:

sns.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,orient=None, color=None, palette=None, saturation=0.75, width=0.8,dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
  • x:指定箱线图的x轴数据。
  • y:指定箱线图的y轴数据。
  • hue:指定分组变量。
  • data:指定用于绘图的数据集。
  • order:传递一个字符串列表,用于分类变量的排序。
  • hue_order:传递一个字符串列表,用于分类变量hue值的排序。
  • orient:指定箱线图的呈现方向,默认为垂直方向。
  • color:指定所有箱线图的填充色。
  • palette:指定hue变量的区分色。
  • saturation:指定颜色的透明度。
  • width:指定箱线图的宽度。
  • dodge:bool类型的参数,当使用hue参数时,是否绘制水平交错的箱线图,默认为True。
  • fliersize:指定异常值点的大小。
  • linewidth:指定箱体边框的宽度。
  • whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差。
  • notch:bool类型的参数,是否绘制凹口箱线图,默认为False。
  • ax:指定子图的位置。
  • **kwargs:关键字参数,可以调用plt.boxplot函数中的其他参数。
    这里仍以上海二手房数据为例,应用seaborn模块中的boxplot函数绘制分组箱线图,详细代码如下:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
# 读入数据
Sec_Buildings = pd.read_excel(r'不同行政区域的二手房信息.xlsx')
#设置绘图风格
plt.style.use('ggplot')
#处理中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
#坐标轴负号的处理
plt.rcParams['axes.unicode_minus']=False# 二手房在各行政区域的平均单价
group_region = Sec_Buildings.groupby('region')
avg_price = group_region.aggregate({'price_unit':np.mean}).sort_values('price_unit', ascending = False)
# 通过循环,将不同行政区域的二手房存储到列表中
region_price = []
for region in avg_price.index:region_price.append(Sec_Buildings.price_unit[Sec_Buildings.region == region])
# 绘制分组箱线图
sns.boxplot(x = 'region',  #箱线图的x轴数据y = 'price_unit',  #箱线图的y轴数据data = Sec_Buildings,  #用于绘图的数据集order = avg_price.index,  #传递一个字符串列表,用于分类变量的排序showmeans=True,  #以点的形式显示均值color = 'steelblue',  #指定所有箱线图的填充色flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':3},  # 设置异常点属性,如点的形状、填充色和点的大小meanprops = {'marker':'D','markerfacecolor':'blue', 'markersize':4},  # 设置均值点的属性,如点的形状、填充色和点的大小medianprops = {'linestyle':'--','color':'orange'}  # 设置中位数线的属性,如线的类型和颜色)
# 更改x轴和y轴标签
plt.xlabel('区域')
plt.ylabel('单价(元)')
# 添加标题
plt.title('不同行政区域的二手房单价对比')
#控制横纵坐标的值域
plt.axis([-1,17,0,210000])
# 显示图形
plt.show()

不加控制横纵坐标的值域的图为:

加了控制横纵坐标的值域的图为:

通过如上代码,同样可以得到完全一致的分组箱线图。这里建议读者不要直接学习和使用pandas模块和seaborn模块绘制统计图形,而是先把matplotlib模块摸透,因为Python的核心绘图模块是matplotlib

Python数据可视化的例子——箱线图(box)相关推荐

  1. python绘制漂亮的线_使用PyQtGraph进行Python数据可视化:绘制精美线图(以上证指数走势为例)...

    在上两篇文章中,我们介绍了: 本篇文章将介绍使用PyQtGraph绘制一个精美折线图, 在了解了基本的PyQtGraph模块绘制图形功能之后,我们通过几个常用常见的数据可视化图形来演示使用PyQtGr ...

  2. Python实验二:分析1996~2015年人口数据特征间的关系、分析并绘制鸢尾花数据的散点图和箱线图

    人口数据下载链接:populations.npz 鸢尾花数据下载链接:鸢尾花 (下载积分已改为0,请下载) 目录 一.题目表述 1.分析1996~2015年人口数据特征间的关系 2.分析并绘制鸢尾花数 ...

  3. Python数据可视化的例子——小提琴图(violin)

    小提琴图是比较有意思的统计图形,它将数值型数据的核密度图与箱线图融合在一起,进而得到一个形似小提琴的图形.尽管matplotlib模块也提供了绘制小提琴图的函数violinplot,但是绘制出来的图形 ...

  4. python气象绘图技巧之箱线图

    python气象绘图技巧–seaborn catplot python气象绘图技巧--seaborn 前言 一.构建dataframe和seaborn分类? 二.使用步骤 1.引入库 2.数据分析 总 ...

  5. Python数据可视化的例子——画图总结

    前面写了大量的文章是关于数据的可视化,通过每一个具体的案例介绍了有关matplotlib模块.pandas模块和seaborn模块的绘图函数和参数含义,分别针对离散型数据.数值型数据和关系型数据讲解了 ...

  6. Python 之 Matplotlib 散点图、箱线图和词云图

    文章目录 一.散点图 1. scatter() 函数 2. 设置图标大小 3. 自定义点的颜色和透明度 4. 可以选择不同的颜色条,配合 cmap 参数 5. cmap 的分类 5.1 Sequent ...

  7. Python数据可视化的例子——多个图形的合并

    工作中往往会根据业务需求,将绘制的多个图形组合到一个大图框内,形成类似仪表板的效果.针对这种情况,如何应用Python将前面所学的各种图形汇总到一个图表中,这将是本节所要学习的重点. 关于多种图形的组 ...

  8. python中数据用折线图表示_使用PyQtGraph进行Python数据可视化:绘制精美折线图(以 上证指数走势为例)...

    在前两篇文章中,我们介绍了: 在了解了基本的PyQtGraph模块绘制图形功能之后,我们通过几个常用常见的数据可视化图形来演示使用PyQtGraph进行Python数据可视化. 本篇,我们介绍使用Py ...

  9. AMap + echarts、google map + d3.js分别实现数据可视化中的飞线图(迁徙图)

    首先肯定是给出demo啦: 演示demo 直接到左侧选择框中选择View taxi flow里面随便选个日期 总体介绍 最近由于工作室项目需要做一个数据可视化平台,这个平台最终是交由国外人使用的.而国 ...

最新文章

  1. SQL 死锁分析(转贴)
  2. qgraphicsview鼠标移动图片_QGraphicsView中的QGraphicsItem鼠标拖动
  3. YVU420PackedSemiPlanar32m4ka与YUV420PackedSemiPlanar64x32Tile2m8ka
  4. 图像识别用python还是matlab_用于图像识别的五大最佳编程语言!
  5. MATLAB基础学习系列二——矩阵
  6. html5版微博qq登录,QQ和新浪微博登陆第三方的简单实现
  7. 《期权、期货及其他衍生产品》读书笔记(第二章:期货市场与中央交易对手)
  8. Redundant Paths(边双连通分量缩点+思维构造)
  9. 观远数据带你乘云驾“务”,让决策更智能
  10. C#:CAN通讯上位机的简单示例Ⅱ
  11. 创建自己的手机条形码Thingy
  12. itol绘制高颜值的进化树
  13. TradeGraph媲美交易软件的python量化交易K线工具
  14. yarn Integrity check failed ... computed integrity doesn‘t match our records
  15. Webapp开发框架Clouda的使用(一)
  16. B站黑马程序员Oracle学习——项目案例:送水公司收费系统
  17. 火箭还是飞机?——DevOps 的两种模式
  18. 如何在SuperMap iDesktop发布交通网络分析服务(学习笔记)
  19. linux系统ip访问53端口,linux – 使用公共IP地址无法访问本地端口
  20. c语言l1-024,公式编写

热门文章

  1. Pixelmator Pro 2.0:预设滤镜和超 200 款预设样式重磅登场
  2. ucinet三天写论文!P1模型分析实战
  3. [转]修复windows的启动项:MBRFix工具
  4. (三) 区块链数据结构 – 交易
  5. Android Studio中启动模拟器时提示HAXM错误的解决方法
  6. 对于微电子学初学者应该掌握哪些能力与技
  7. 7-4 鸿鸿哥分钱(C++)
  8. mblock机器人指令_mBot机器人如何通过蓝牙实现与PC端mBlock的无线通信?
  9. 什么是正态分布?为何如此重要?终于有人讲明白了
  10. 怎样用cmd运行cmd,并在新打开的cmd中运行命令