# 绘制箱形图

# 使用 boxplot() 绘制箱形图

# 使用 pyplot 的 boxplot() 函数可以快速绘制箱形图,boxplot() 函数的语法格式如下所示 :

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 :绘制箱形图的数据。
・ sym :表示异常值对应的符号,默认为空心圆圈。
・ vert :表示是否将箱形图垂直摆放,默认为垂直摆放。
・ whis :表示箱形图上下须与上下四分位的距离,默认为 1.5 倍的四分位差。
・ positions :表示箱体的位置。
・ widths :表示箱体的宽度,默认为 0.5。
・ patch_artist :表示是否填充箱体的颜色,默认不填充。
・ meanline :是否用横跨箱体的线条标出中位数,默认不使用。
・ showcaps :表示是否显示箱体顶部和底部的横线,默认显示。
・ showbox:表示是否显示箱形图的箱体,默认显示。
・ showfliers :表示是否显示异常值,默认显示。
・ labels :表示箱形图的标签。
・ boxprops :表示控制箱体属性的字典。

# 使用boxplot() 函数绘制一个箱形图,代码如下。

In [22]:
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(100)
# 绘制箱形图:显示中位数的线条, 箱体宽度为 0.3, 填充箱体颜色, 不显示异常值
plt.boxplot (data, meanline=True, widths=0.3, patch_artist=True,
             showfliers=False)
plt.show ()

# 运行程序,效果如图 2-20 所示。

image

# 实例8:2017 年和 2018 年全国发电量统计

# “中国报告大厅”网站对 2017 年和 2018 年的发电量分别进行了监测统计,结果如表 2-7 所示。

image

# 根据表 2-7 的数据,将“发电量(亿千瓦·时)” 两列的数据作为 x 轴的数据,将 “2017年” 和 “2018年” 作为y 轴的刻度标签,使用 boxplot() 函数绘制 2017 年和 2018 年全国发电量的箱形图,具体代码如下。

In [23]:
# 08_generation_capacity
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.reParams['axes.unicode_minus'] = False
data_2018 = np.array([5200, 5254.5, 5283.4, 5107.8, 5443.3, 5550.6,
                      6400.2, 6404.9, 5483.1, 5330.2, 5543, 6199.9])
data_2017 = np.array([4605.2, 4710.3, 5168.9, 4767.2, 4947, 5203,
                      6047.4, 5945.5, 5219.6, 5038.1, 5196.3, 5698.6])
# 绘制箱形图
plt.boxplot([data_2018, data_2017], labels=('2018年','2017年'),
             meanline=True, widths=0.5, vert=False, patch__artist=True)
plt.show()

# 运行程序,效果如图 2-21 所示。
图 2-21 中, x 轴代表发电量, y 轴代表年份,箱体代表集中的数据范围,箱体内部的竖线代表中位数,箱形左右边缘的竖线代表最小值与最大值,右边缘竖线右侧的空心圆圈代表异常值。由图 2-21 可知,2017 年每月的发电量大多分布于 4800亿 ~ 5300亿千瓦·时范围内,2018 年每月的发电量大多分布于 5250亿 〜 5700亿千瓦·时范围内。

image