Python Matplotlib库:统计图补充

简介: 上两期我们讲了 Matplotlib 库的基本语法和基本绘图展示。这期我们来说说如何用 Matplotlib 库绘制常用统计图。用hist()方法来绘制直方图。用boxplot()方法来绘制箱线图。用errorbar()方法来绘制误差条图。用violinplot()方法来绘制小提琴图。用eventplot()方法来绘制尖峰栅格图。用hist2d()方法来绘制二维直方图/散点密度图。用hexbin()方法来绘制Hexbin散点图。用pie()方法来绘制扇形图。
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页: 小嗷犬的博客
🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
🥭本文内容:Python Matplotlib库:统计图补充

1.引言

上两期我们讲了 Matplotlib 库的基本语法和基本绘图展示。(参见: Python 数据可视化:Matplotlib库的使用Python Matplotlib库:基本绘图补充

这期我们来说说如何用 Matplotlib 库绘制常用统计图。


2.直方图

最常用的统计图就是直方图了,我们可以用 hist()方法来绘制直方图,它的语法格式如下:
plt.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)

参数说明:

参数 说明
x 输入数据。
bins 如果bins是整数,则它定义区域中等宽条柱的数量。如果bins是一个序列,它定义箱子边缘,包括第一个箱子的左边缘和最后一个箱子的右边缘;在这种情况下,箱子的间距可能不相等。如果 bins 是一个字符串,则它是'auto'、'fd'、'doane'、'scott'、'stone'、'rice'、'sturges'或 'sqrt'之一。
range 条柱的下限和上限范围。下限和上限异常值将被忽略。
density 为True时,绘制并返回条柱密度。
weights x 长度相同的权重数组,会为 x 对应位置的值进行加权
cumulative 为True时,每个条柱的数值会累加前面的所有条柱数值。最后一个条柱会累加所有的数值。为负时,累加方向相反。
bottom 每个条柱底部的位置,如果为数字,则每个条柱的底部移动相同的量。如果是数组,则每个箱子都是独立移动的,底部的长度必须与箱子的数量相匹配。
histtype 要绘制的直方图的类型:'bar'、'barstacked'、'step'、'stepfilled',默认为'bar'。
align 直方图条柱的水平对齐方式:'left'、'mid'、'right',默认为'mid'。
orientation 直方图的方向:'vertical'、'horizontal',默认为'vertical'。
··· ······
**kwargs 其他参数。

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))
plt.suptitle("统计数字出现的次数")

x = 4 + np.random.normal(0, 1.5, 200)

plt.hist(x,linewidth=0.5, edgecolor="white")
plt.show()
效果图:
直方图

3.箱线图

箱线图也是常用统计图之一,我们可以用 boxplot()方法来绘制箱线图,它的语法格式如下:
plt.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 输入数据。如果是 2D 数组,则会为 x 中的每一列绘制一个箱线图。如果是一系列一维数组,则会为 x 中的每个数组绘制一个箱线图。
notch 为True时,绘制凹口箱线图。
sym 指定异常点的形状,默认为+号显示。
vert 是否需要将箱线图垂直摆放,默认垂直摆放。
whis 指定上下须与上下四分位的距离,默认为1.5倍的四分位差。
positions 指定箱线图的位置,默认为[0,1,2…]。
widths 指定箱线图的宽度,默认为0.5。
patch_artist 是否填充箱体的颜色。
meanline 是否用线的形式表示均值,默认用点来表示。
showmeans 是否显示均值,默认不显示。
showcaps 是否显示箱线图顶端和末端的两条线,默认显示。
showbox 是否显示箱线图的箱体,默认显示。
showfliers 是否显示异常值,默认显示。
boxprops 设置箱体的属性,如边框色,填充色等。
labels 为箱线图添加标签,类似于图例的作用。
flierprops 设置异常值的属性,如异常点的形状、大小、填充色等。
medianprops 设置中位数的属性,如线的类型、粗细等。
meanprops 设置均值的属性,如点的大小、颜色等。
capprops 设置箱线图顶端和末端线条的属性,如颜色、粗细等。
whiskerprops 设置须的属性,如颜色、粗细、线的类型等。

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))
plt.boxplot(x, positions=[2, 4, 6], widths=1.5, patch_artist=True,
                showmeans=False, showfliers=False,
                medianprops={"color": "white", "linewidth": 0.5},
                boxprops={"facecolor": "C0", "edgecolor": "white","linewidth": 0.5},
                whiskerprops={"color": "C0", "linewidth": 1.5},
                capprops={"color": "C0", "linewidth": 1.5})

plt.show()
效果图:
箱线图

4.误差条图

Matplotlib 库中,我们可以用 errorbar()方法来绘制误差条图,用于表现有一定置信区间的带误差数据,它的语法格式如下:
plt.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, *, data=None, **kwargs)

参数说明:

参数 说明
xy 数据点的位置坐标。
xerryerr 数据的误差范围。
fmt 数据点的标记样式以及相互之间连接线样式。
ecolor 误差条的线条颜色。
elinewidth 误差条的线条粗细。
capsize 误差条边界横杠的大小。
capthick 误差条边界横杠的厚度。
ms 数据点的大小。
mfc 数据点的颜色。
mec 数据点边缘的颜色。

代码实例:

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = [2, 4, 6]
y = [3.6, 5, 4.2]
yerr = [0.9, 1.2, 0.5]
plt.errorbar(x, y, yerr, fmt='o', linewidth=2, capsize=6)

plt.show()
效果图:
误差条图

5.小提琴图

我们可以用 violinplot()方法来绘制小提琴图,它的作用与箱线图类似,语法格式如下:
plt.violinplot(dataset, positions=None, vert=True, widths=0.5, showmeans=False, showextrema=True, showmedians=False, quantiles=None, points=100, bw_method=None, *, data=None)

参数说明:

参数 说明
dataset 输入数据。
positions 指定小提琴图位置。
vert 设置小提琴图方向是否是水平,默认值False。
widths 箱体的宽度,默认值0.5。
showmeans 是否显示算术平方根,默认值False,
showextrema 是否显示极值,默认值True
showmedians 是否显示中位数,默认值False
quantiles 指定分位数的位置,取值范围为[0,1]。
points 定义计算核密度估计的点的数量,默认值100。
bw_method 用于估算带宽的方法,默认值scott,可选参数silverman。

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = np.random.normal((3, 5, 4), (0.75, 1.00, 0.75), (200, 3))
plt.violinplot(x, [2, 4, 6], widths=2, showmeans=True, showmedians=True, showextrema=True)

plt.show()
效果图:
小提琴图

6.尖峰栅格图

我们可以用 eventplot()方法来绘制尖峰栅格图,常在神经科学中用于表示神经事件,也可用于显示多组离散事件的时间或位置,语法格式如下:
plt.eventplot(positions, orientation='horizontal', lineoffsets=1, linelengths=1, linewidths=None, colors=None, linestyles='solid', *, data=None, **kwargs)

参数说明:

参数 说明
positions 一个一维类数组结构定义了一个事件序列的位置;由类数组结构构成的列表可以表示多组事件,每组事件都可以单独设置 lineoffsetslinelengthslinewidthscolorslinestyles等参数。不建议使用二维数据结构。类型为类数组或类数组列表。必备参数。
orientation 时间序列的方向。取值范围为{'horizontal', 'vertical'}。默认值为'horizontal'。可选参数。
lineoffsets 直线中心相对于原点的偏移量,垂直于orientation,如果positions参数为二维结构,该参数可为序列,长度应与positions一致。类型为浮点数或类数组,默认值为1。可选参数。
linelengths 线条的高度的总和(即lineoffset - linelength/2 to lineoffset + linelength/2),如果positions参数为二维结构,该参数可为序列,长度应与positions一致。类型为浮点数或类数组,默认值为1。可选参数。
linewidths 线条的宽度,单位为像素点,如果positions参数为二维结构,该参数可为序列,长度应与positions一致。类型为浮点数或类数组,默认值1.5。可选参数。
colors 线条的颜色,如果positions参数为二维结构,该参数可为序列,长度应与positions一致。类型为颜色值或颜色值列表,默认值为'C0'。可选参数。
linestyles 线条的样式,如果positions参数为二维结构,该参数可为序列,长度应与positions一致。类型为字符串、元组、字符串或元组的列表。默认值为'solid'。有效的字符串范围为['solid', 'dashed', 'dashdot', 'dotted', '-', '--', '-.', ':'],元组的形式应为(offset, onoffseq)onoffseq是一个以像素点为单位的断断续续的元组。
**kwargs 其他参数。

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = [2, 4, 6]
D = np.random.gamma(4, size=(3, 50))
plt.eventplot(D, orientation="vertical", lineoffsets=x, linewidth=0.75)

plt.show()
效果图:
尖峰栅格图

7.二维直方图/散点密度图

我们可以用 hist2d()方法来绘制二维直方图/散点密度图,它的作用与散点图类似,语法格式如下:
plt.hist2d(x, y, bins=10, range=None, density=False, weights=None, cmin=None, cmax=None, *, data=None, **kwargs)

参数说明:

参数 说明
xy 数据点坐标。
其他参数 基本同hist()

详情请参见:matplotlib.axes.Axes.hist2d

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = np.random.randn(5000)
y = 1.2 * x + np.random.randn(5000) / 3

plt.hist2d(x, y, bins=(np.arange(-3, 3, 0.1), np.arange(-3, 3, 0.1)))

plt.show()
效果图:
二维直方图

8.Hexbin散点图

我们可以用 hexbin()方法来绘制Hexbin散点图,它是一种特殊的散点图,可以清晰的表示大量可能重叠的散点,语法格式如下:
plt.hexbin(x, y, C=None, gridsize=100, bins=None, xscale='linear', yscale='linear', extent=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors='face', reduce_C_function=<function mean>, mincnt=None, marginals=False, *, data=None, **kwargs)

参数说明:

参数 说明
xy 表示六边形坐标。
C 表示六边形的值。
gridsize 表示x方向或两个方向上的六边形数量。
xscale 在水平轴上使用线性或对数刻度。
xycale 在垂直轴上使用线性或对数刻度。
mincnt 表示六边形能够显示的最小值。
marginals 用于沿x轴底部和y轴左侧绘制颜色映射为矩形的边际密度。
extent 表示六边形值的极限。

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = np.random.randn(5000)
y = 1.2 * x + np.random.randn(5000) / 3

plt.hexbin(x, y, gridsize=50)

plt.show()
效果图:
Hexbin散点图

9.扇形图

最常用的统计图之一,我们可以用 pie()方法来绘制扇形图,它的语法格式如下:
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, normalize=True, data=None)

参数说明:

参数 说明
x 即每个扇形的占比的序列或数组。
explode 如果不是None,则是一个len(x)长度的数组,指定每一块的突出程度;突出显示,设置每一块分割出来的间隙大小。
labels 为每个扇形提供标签的字符串序列。
colors 为每个扇形提供颜色的字符串序列。
autopct 如果它是一个格式字符串,将格式化标签。如果它是一个函数,它将被调用。
shadow 是否显示阴影。
startangle 从x轴逆时针旋转,饼的旋转角度。
pctdistance 默认为0.6,每个扇形的中心与由autopct生成的文本的开头之间距离与半径的比率,大于1的话会显示在圆外。
labeldistance 默认为1.1,扇形图标签绘制时的径向距离。如果设置为None,则不绘制标签,而是存储在图例中使用。

代码实例:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False  # 防止负号乱码

plt.figure(figsize=(8, 7))

x = [1, 2, 3, 4]
colors = plt.get_cmap('Blues')(np.linspace(0.2, 0.7, len(x)))

plt.pie(x, colors=colors, radius=3, center=(4, 4), wedgeprops={"linewidth": 1, "edgecolor": "white"}, frame=True)

plt.show()
效果图:
扇形图
目录
相关文章
|
9天前
|
数据可视化 Python
Python中的数据可视化:使用Matplotlib绘制图表
【9月更文挑战第11天】在这篇文章中,我们将探索如何使用Python的Matplotlib库来创建各种数据可视化。我们将从基本的折线图开始,然后逐步介绍如何添加更多的功能和样式,以使您的图表更具吸引力和信息量。无论您是数据科学家、分析师还是任何需要将数据转化为视觉形式的专业人士,这篇文章都将为您提供一个坚实的起点。让我们一起潜入数据的海洋,用视觉的力量揭示其背后的故事。
33 16
|
1天前
|
数据可视化 数据挖掘 API
使用Python进行数据可视化:探索Matplotlib和Seaborn库
【9月更文挑战第19天】在数据科学领域,将复杂的数据集转换成直观、易懂的图形是一项基本而关键的技能。本文旨在通过Python编程语言介绍两个强大的数据可视化库——Matplotlib和Seaborn,以及它们如何帮助数据分析师和研究人员揭示数据背后的故事。我们将从基础概念讲起,逐步深入到高级技巧,确保无论读者的背景如何,都能获得必要的知识和启发,以在自己的项目中实现有效的数据可视化。
|
1天前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
12 4
|
1天前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
7 2
|
4天前
|
SQL 前端开发 数据可视化
Rodeo支持多种Python库
Rodeo支持多种Python库
16 5
|
3天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
18 3
|
8天前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
37 8
|
15天前
|
数据可视化 数据挖掘 数据处理
Python中数据可视化的魔法——使用Matplotlib和Pandas
【9月更文挑战第5天】在Python的世界里,数据可视化是连接复杂数据与人类直觉的桥梁。本篇文章将带领读者探索如何使用Matplotlib和Pandas这两个强大的库来揭示数据背后的故事。我们将从基础概念开始,逐步深入到高级技巧,让每一位读者都能轻松创建引人入胜的数据可视化图表,使数据分析变得既直观又有趣。
58 14
|
12天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
31 7
|
9天前
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化