文章目录
- 前言
- 一、Matplotlib简介及安装
- 1. Matplotlib简介
- 2. 安装Matplotlib
- 二、Matplotlib Pyplot
- 1. Pyplot介绍
- 2. Pyplot中方法介绍
- 2.1 创建和管理图形
- 2.2 绘制图形
- 2.3 设置图形属性
- 2.4 保存和展示
- 三、Matplotlib绘图标记
- 1. 介绍
- 2. 基本用法
- 3. 标记大小与颜色
- 4. 标记样式列表
- 四、Matplotlib绘图线
- 1. 线型基础
- 2. 线宽与颜色
- 3. 多重线型组合
- 五、Matplotlib轴标签、标题和网格线
- 1. 轴标签方法及参数解释
- 1.1 X轴标签方法及参数解释
- 1.2 Y轴标签方法及参数解释
- 1.3 Z轴标签方法及参数解释
- 2. 标题方法及参数解释
- 3. 网格线方法及参数解释
- 六、Matplotlib基本绘图
- 1. 折线图
- 1.1 方法及参数解释
- 1.2 代码示例
- 2. 散点图
- 2.1 方法及参数解释
- 2.2 代码示例
- 3. 柱状图
- 3.1 方法及参数解释
- 3.2 代码示例
- 4. 直方图
- 4.1 方法及参数解释
- 4.2 代码示例
- 5. 饼图
- 5.1 方法及参数解释
- 5.2 代码示例
- 6. 面积图
- 6.1 方法及参数解释
- 6.2 代码示例
- 7. 箱线图
- 7.1 方法及参数解释
- 7.2 代码示例
- 8. 等高线图
- 8.1 方法及参数解释
- 8.2 代码示例
- 9. 3D图
- 9.1 3D散点图
- 9.1.1 方法及参数解释
- 9.1.2 代码示例
- 9.2 3D线框图
- 9.2.1 方法及参数解释
- 9.2.2 代码示例
- 9.3 3D曲面图
- 9.3.1 方法及参数解释
- 9.3.2 代码示例
- 10. 热力图
- 10.1 方法及参数解释
- 10.2 代码示例
- 11. 极坐标图
- 11.1 方法及参数解释
- 11.2 代码示例
- 12. 误差棒图
- 12.1 方法及参数解释
- 12.2 代码示例
- 13. 阶梯图
- 13.1 方法及参数解释
- 13.2 代码示例
- 14. 矢量图
- 14.1 方法及参数解释
- 14.2 代码示例
- 15. 小提琴图
- 15.1 方法及参数解释
- 15.2 代码示例
- 七、Matplotlib多图绘制
- 1. 子图(`subplots()`)
- 1.1 方法及参数解释
- 1.2 代码示例
- 2. 子图(`subplot()`)
- 2.1 方法及参数解释
- 2.2 代码示例
前言
在数据分析和可视化的过程中,图形的呈现往往是理解数据的重要环节。Matplotlib作为Python中最流行的绘图库之一,提供了丰富的功能和灵活的接口,使得用户能够轻松创建各种类型的图表。无论是简单的线图、散点图,还是复杂的3D图形和小提琴图,Matplotlib都能满足不同的需求。
本篇文章将详细介绍Matplotlib的基本使用,包括安装、核心模块Pyplot的功能、各种图形的绘制方法以及如何自定义图表的样式和属性。通过示例代码和图表展示,读者将能够掌握如何利用Matplotlib进行高效的数据可视化,进而提升数据分析的效果和效率。
一、Matplotlib简介及安装
1. Matplotlib简介
Matplotlib是一个强大的Python绘图库,最初由John D. Hunter于2003年创建。它提供了一个类似于MATLAB的绘图接口,能够生成高质量的2D和3D图形。Matplotlib的核心是pyplot
模块,它提供了类似于MATLAB的绘图API,使得用户可以轻松地创建各种图表。
2. 安装Matplotlib
在开始使用Matplotlib之前,需要先安装它,通过以下命令安装:
pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/
二、Matplotlib Pyplot
1. Pyplot介绍
Matplotlib是Python中一个非常强大的数据可视化库,而Pyplot则是Matplotlib的一个子模块,它提供了一个类似于MATLAB风格的绘图接口,使得用户可以方便快捷地创建图表。通过Pyplot,用户可以轻松绘制线图、散点图、条形图、直方图等多种类型的图形,并对这些图形进行定制和优化。Pyplot的设计目标是让用户即使没有深入了解Matplotlib的内部机制,也能快速上手并制作出美观的数据可视化结果。
2. Pyplot中方法介绍
2.1 创建和管理图形
在Matplotlib的Pyplot模块中,创建和管理图形是进行数据可视化的基本步骤。
下面是一些关键方法及其功能:
方法名 | 说明 |
---|---|
figure() | 创建一个新的图形窗口,可以通过参数指定图形大小、分辨率等属性。例如,plt.figure(figsize=(width, height)) 可以设置图窗大小。 |
subplot() | 在一个图形窗口中添加子图,支持多种布局方式。比如,plt.subplot(2, 2, 1) 表示在一个2行2列的网格中的第1个位置创建子图。 |
subplots() | 更灵活地创建包含多个子图的图形,并返回图形和子图对象的引用,方便后续操作。如 (fig, axes) = plt.subplots(nrows=2, ncols=2) 创建2x2的子图矩阵。 |
close() | 关闭当前图形或通过指定ID关闭特定图形,有助于释放内存资源。使用如 plt.close(fig) 或 plt.close('all') 来关闭所有图形。 |
2.2 绘制图形
绘制图形是数据可视化的中心任务,Pyplot提供了丰富的绘图函数来满足不同的需求。
方法名 | 说明 |
---|---|
plot() | 基础线条图,可以用来展示趋势或关系。通过传入x轴和y轴的数据,如 plt.plot(x, y) 。 |
scatter() | 散点图用于显示两个变量的相关性,plt.scatter(x, y, s=None, c=None) 其中s为点的大小,c为颜色。 |
bar() | 简单条形图,适用于比较分类数据。如 plt.bar(x, height, width=0.8) ,其中x为类别,height为高度。 |
barh() | 水平条形图,与bar() 相似但方向相反。 |
hist() | 直方图,用于展示数值分布情况。例如,plt.hist(data, bins=10) 将数据分为10个区间。 |
boxplot() | 箱型图,用于显示一组数据的分散情况。 |
pie() | 饼图,用于表示各部分占整体的比例。如 plt.pie(sizes, labels=labels, autopct='%1.1f%%') 。 |
2.3 设置图形属性
设置图形属性对于提高图表的可读性和美观度至关重要。
方法名 | 说明 |
---|---|
title() | 添加标题,可以通过 plt.title('My Plot Title') 设置图表标题。 |
xlabel() | 设置x轴标签,如 plt.xlabel('X Axis Label') 。 |
ylabel() | 设置y轴标签,用法同上。 |
xticks() | 控制x轴刻度的位置和标签,plt.xticks(ticks, labels) 。 |
yticks() | 类似于xticks(),但作用于y轴。 |
legend() | 添加图例,帮助解释不同数据系列。如 plt.legend(['Series 1', 'Series 2']) 。 |
grid() | 添加网格线以便于读取数据点的位置,plt.grid(True) 。 |
axis() | 控制坐标轴的属性,包括范围、比例等。 |
2.4 保存和展示
完成图表绘制后,下一步就是将其保存或展示给观众。
方法名 | 说明 |
---|---|
show() | 显示所有打开的图形窗口,plt.show() 必须调用才能在屏幕上显示图形。 |
savefig() | 将当前图形保存为文件,支持多种格式(如PNG、PDF、SVG)。例如,plt.savefig('my_figure.png') 。 |
三、Matplotlib绘图标记
1. 介绍
在Matplotlib中,绘图标记(markers)是用于强调数据点的符号。它们可以被添加到各种类型的线条图中,比如简单的plot
线图,或者散点图scatter
等。使用不同的标记可以帮助我们更清晰地表达数据的特点或区分不同的数据序列。下面是一些关于如何在绘图中应用和自定义标记的信息:
2. 基本用法
在绘制线图时,可以通过plot()
函数的marker
参数指定标记类型。
例如:
import matplotlib.pyplot as pltx = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]plt.plot(x, y, marker='o') # 使用圆圈作为标记
plt.show()
这里,'o'
表示圆形标记。你可以尝试其他字符来改变标记形状,如's'
代表正方形,'^'
代表上三角形等。
3. 标记大小与颜色
你可以通过markersize
参数调整标记大小,以及通过markerfacecolor
和markeredgecolor
分别设置标记填充色和边缘颜色。示例代码如下:
plt.plot(x, y, marker='o', markersize=10, markerfacecolor='red', markeredgecolor='blue')
plt.show()
4. 标记样式列表
以下是一些常用的标记样式:
'.'
点标记','
像素标记'o'
圆圈'v'
下三角'^'
上三角'<'
左三角'>'
右三角'1'
类似三叉戟向下'2'
类似三叉戟向上'3'
左三叉戟'4'
右三叉戟's'
正方形'p'
五边形'*'
星号'h'
六边形侧边'H'
六边形点'+'
加号'x'
x标记'D'
菱形'd'
细菱形'|'
水平线标记'_'
垂直线标记
四、Matplotlib绘图线
1. 线型基础
在Matplotlib中,线型(linestyle 或 ls)用于指定线条的样式。除了实线外,还可以绘制虚线、点划线等多种样式。这为数据可视化提供了丰富的表现形式。
线型代码 | 描述 |
---|---|
'-' | 实线 |
'--' | 虚线 |
'-.' | 点划线 |
':' | 点线 |
示例:
import matplotlib.pyplot as plt
import numpy as np# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linestyle='-', label='实线') # 实线
plt.plot(x, np.cos(x), linestyle='--', label='虚线') # 虚线
plt.plot(x, np.tan(x), linestyle='-.', label='点划线') # 点划线
plt.plot(x, -np.sin(x), linestyle=':', label='点线') # 点线
plt.legend()
plt.show()
结果如下图所示:
2. 线宽与颜色
可以通过设置linewidth
(或简写为lw
)来调整线条的宽度,并使用color
(或简写为c
)来改变线条的颜色。例如:
plt.plot(x, np.sin(x), linewidth=2, color='blue') # 设置线宽和颜色
3. 多重线型组合
在同一图表中,可以结合不同的线型、颜色、标记等来区分多条线。这对于展示多组数据特别有用:
import matplotlib.pyplot as plt
import numpy as np# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linestyle='-', color='blue', label='Sine')
plt.plot(x, np.cos(x), linestyle='--', color='red', label='Cosine')
plt.legend()
plt.show()
结果如下图所示:
五、Matplotlib轴标签、标题和网格线
1. 轴标签方法及参数解释
1.1 X轴标签方法及参数解释
为X轴添加标签是提高图表可读性的重要步骤,可以通过xlabel()
函数来实现。
使用的方法:
plt.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
参数名 | 描述 |
---|---|
xlabel | 字符串,X轴的标签文本。 |
fontdict | 字典类型,用于覆盖默认字体属性(如大小、颜色等)。 |
labelpad | 标签与轴的距离,默认值为None,可以根据需要调整。 |
**kwargs | 可以传递其他文本属性,比如位置(loc='left' , 'center' , 'right' )。 |
1.2 Y轴标签方法及参数解释
类似地,Y轴标签可以通过ylabel()
函数来设置。
使用的方法:
plt.ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)
参数名 | 描述 |
---|---|
ylabel | 字符串,Y轴的标签文本。 |
fontdict | 字典类型,用于覆盖默认字体属性(如大小、颜色等)。 |
labelpad | 标签与轴的距离,默认值为None,可以根据需要调整。 |
**kwargs | 可以传递其他文本属性,比如位置(loc='top' , 'center' , 'bottom' )。 |
1.3 Z轴标签方法及参数解释
对于三维图形,Z轴的标签可以通过zlabel()
函数来设置,该函数属于Axes3D
模块。
使用的方法:
ax.set_zlabel(zlabel, fontdict=None, labelpad=None, **kwargs)
参数名 | 描述 |
---|---|
zlabel | 字符串,Z轴的标签文本。 |
fontdict | 字典类型,用于覆盖默认字体属性(如大小、颜色等)。 |
labelpad | 标签与轴的距离,默认值为None,可以根据需要调整。 |
**kwargs | 可以传递其他文本属性。 |
2. 标题方法及参数解释
为图表添加标题有助于快速传达图表的主要信息或主题,这可以通过title()
函数来实现。
使用的方法:
plt.title(label, fontdict=None, loc='center', pad=None, **kwargs)
参数名 | 描述 |
---|---|
label | 字符串,标题文本内容。 |
fontdict | 字典类型,用于覆盖默认字体属性(如大小、颜色等)。 |
loc | 标题位置,可以是'center' , 'left' , 'right' 之一,默认为中心对齐。 |
pad | 标题与图表顶部的距离,默认值为None。 |
**kwargs | 其他文本属性,比如颜色等。 |
3. 网格线方法及参数解释
在Matplotlib中,添加网格线可以帮助更轻松地读取图表上的数据点位置,提升图表的可读性。这可以通过grid()
函数来实现。
使用的方法:
plt.grid(b=None, which='major', axis='both', **kwargs)
参数名 | 描述 |
---|---|
b | 控制是否启用网格线(布尔值)。 |
which | 指定显示主要(‘major’)、次要(‘minor’)还是两者(‘both’)的网格线。 |
axis | 决定是在x轴、y轴还是两个轴(‘both’)上显示网格线。 |
**kwargs | 允许通过关键字参数设置网格线的颜色、宽度、样式等属性,例如color='red' , linestyle='--' 。 |
示例代码:
import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))# 添加网格线
plt.grid(True, which='major', axis='both', linestyle='--', linewidth=0.5, color='gray')plt.show()
在这个例子中,我们启用了网格线,并设置了它们为虚线形式(linestyle='--'
),线宽为0.5(linewidth=0.5
),颜色为灰色(color='gray'
),并且应用于x轴和y轴的所有主刻度上。通过调整这些参数,可以根据需要自定义网格线的外观,使其更好地适应你的图表设计。
六、Matplotlib基本绘图
1. 折线图
1.1 方法及参数解释
在Matplotlib中,绘制折线图主要使用pyplot
模块中的plot()
方法。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 示例值 |
---|---|---|
x, y | 数据点的坐标,分别表示x轴和y轴的数据。最少需要提供这两个参数。 | [1, 2, 3], [4, 5, 6] |
color | 设置线条的颜色。可以使用颜色名称或RGB值等。 | 'blue' , '#00FF00' |
linestyle | 设置线条样式,如实线、虚线等。 | '-' , '--' , ':' |
linewidth | 设置线条宽度。 | 2.0 , 4.0 |
marker | 标记数据点的符号。 | 'o' , 's' , '^' |
markersize | 设置标记大小。 | 8 , 12 |
alpha | 设置线条和标记的透明度(0至1之间)。 | 0.5 , 1.0 |
label | 为线条添加标签,用于图例显示。 | '样本数据' |
1.2 代码示例
下面是一个简单的例子,演示如何使用上述参数来创建一个折线图:
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 准备数据
x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 4, 9, 16, 25]# 创建折线图
plt.plot(x, y, color='blue', linestyle='-', marker='o',markersize=8, alpha=0.7, label='平方函数')# 添加标题和坐标轴标签
plt.title("简单折线图示例") # 使用中文标题
plt.xlabel("X轴") # 使用中文X轴标签
plt.ylabel("Y轴") # 使用中文Y轴标签# 显示图例
plt.legend()# 显示网格
plt.grid(True)# 展示图表
plt.show()
结果如下图所示:
2. 散点图
2.1 方法及参数解释
在Matplotlib中,绘制散点图主要使用pyplot
模块中的scatter()
方法。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x, y | 数据点的坐标,分别表示X轴和Y轴的数据。长度必须相同。 | array-like | 必需(无默认值) |
s | 标记点的大小。可以是单个数值或一个数组,如果是数组,其长度必须与x 和y 相同。 | scalar or array-like | 20 |
c | 颜色或颜色数组。可以是一个单一的颜色格式字符串,也可以是一个数值数组用于颜色映射。 | color or array-like | 'b' |
marker | 数据点标记样式。例如:'o' (圆圈)、's' (正方形)、'*' (星形)。 | MarkerStyle | 'o' |
cmap | 当c 为浮点数数组时使用的颜色映射表。如:'viridis' , 'plasma' 等。 | Colormap | None |
alpha | 设置点的透明度(0至1之间)。 | scalar | None |
label | 为散点图添加标签,用于图例显示。 | str | None |
2.2 代码示例
以下是一个简单的例子,演示如何使用上述参数来创建一个散点图,并展示如何通过颜色和大小来表达额外的信息。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 生成数据
np.random.seed(0)
x = np.random.rand(50) * 100 # X轴数据
y = np.random.rand(50) * 100 # Y轴数据
colors = np.random.rand(50) # 用于颜色映射的数据
area = (10 * np.random.rand(50)) ** 2 # 点的面积# 创建散点图
plt.scatter(x, y, s=area, c=colors, alpha=0.5, cmap='viridis', label='随机数据')# 添加颜色条,显示颜色映射信息
plt.colorbar()# 添加标题和坐标轴标签
plt.title('散点图示例')
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')# 显示图例
plt.legend()# 展示图表
plt.show()
这段代码首先生成了50个随机分布的数据点,每个点的位置由x
和y
决定,点的大小由area
数组控制,颜色由colors
数组决定并通过'viridis'
颜色映射表进行映射。此外,还展示了如何设置点的透明度(alpha
)、添加颜色条(colorbar()
)、设置标题以及坐标轴标签和图例。这样不仅可以清晰地看到数据点之间的关系,还能通过颜色和大小传递更多信息。
结果如下图所示:
3. 柱状图
3.1 方法及参数解释
在Matplotlib中,绘制柱状图主要使用pyplot
模块中的bar()
方法。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x | 柱状图的x轴位置,通常是分类变量或类别名称。 | array-like | 必需(无默认值) |
height | 每个条形的高度,对应于y轴的数据。 | scalar or array-like | 必需(无默认值) |
width | 条形的宽度。 | scalar or array-like | 0.8 |
bottom | 条形底部的y坐标,可用于堆叠条形图。 | scalar or array-like | 0 |
align | 设置条形与x轴标签对齐的方式,可选值为'center' 或'edge' 。 | string | 'center' |
color | 条形的颜色。可以是单一颜色格式字符串或颜色字符串数组。 | color or array-like | 'b' |
label | 为柱状图添加标签,用于图例显示。 | str | None |
edgecolor | 条形的边框颜色。 | color or array-like | 'k' |
linewidth | 设置条形边框的宽度。 | float | None |
3.2 代码示例
下面是一个简单的例子,演示如何使用上述参数来创建一个基本的柱状图,并展示如何通过颜色和标签来增强图表的信息表达。
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 数据准备
categories = ['A', 'B', 'C', 'D', 'E'] # 分类名称
values = [7, 12, 5, 9, 3] # 每个分类对应的数值
width = [0.2, 0.5, 0.3, 0.4, 0.1]
color = ['blue', 'green', 'red', 'purple', 'orange']
label = ['标签1', '标签2', '标签3', '标签4', '标签5']# 创建柱状图
plt.bar(categories, values, width=width, color=color, edgecolor='black', label=label, linewidth=1.2)# 添加标题和坐标轴标签
plt.title('柱状图示例')
plt.xlabel('分类')
plt.ylabel('值')# 显示图例
plt.legend(['数据值1', '数据值2', '数据值3', '数据值4', '数据值5'])# 展示图表
plt.show()
结果如下图所示:
4. 直方图
4.1 方法及参数解释
在Matplotlib中,绘制直方图主要使用pyplot
模块中的hist()
方法。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x | 要绘制的数据集,可以是一维数组或序列。 | array-like | 必需(无默认值) |
bins | 直方图的柱数或边缘(即每个柱的边界)。可以是整数(表示柱的数量)或序列(表示柱的边界)。 | integer or sequence | 10 |
range | 数据范围的元组,指定统计范围,形式为(min, max)。 | tuple | 全数据范围 |
density | 若为True,则返回概率密度;若为False,则返回频数。 | boolean | False |
weights | 给每个样本分配权重,使一些样本比其他样本更重要。 | array_like | None |
cumulative | 若为True,则计算累积频率。 | boolean | False |
color | 直方图的颜色。 | color | 'b' |
label | 图例标签,用于标识不同数据集。 | str | None |
align | 柱状图与bin边界的对齐方式,可选值为'left' , 'mid' , 'right' 。 | string | 'mid' |
alpha | 透明度,取值范围从0(完全透明)到1(完全不透明)。 | scalar | None |
4.2 代码示例
下面是一个简单的例子,演示如何使用上述参数来创建一个基本的直方图,并展示如何通过颜色、透明度和累积选项来增强图表的信息表达。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 生成随机数据
data = np.random.randn(1000)# 创建直方图
plt.hist(data, bins=30, range=(-5, 5), density=True, color='skyblue', edgecolor='black', alpha=0.75, cumulative=False)# 添加标题和坐标轴标签
plt.title('直方图示例')
plt.xlabel('值')
plt.ylabel('频率')# 显示图例
plt.legend(['数据分布'])# 展示图表
plt.show()
这段代码首先使用numpy
生成了1000个服从标准正态分布的随机数作为数据集。然后使用plt.hist()
函数创建了一个直方图,设置了柱的数量为30,数据范围限定在-5到5之间,并将y轴显示设置为频率密度。此外,还给直方图设置了浅蓝色填充色和黑色边框以增强视觉效果,并调整了透明度以便更好地观察重叠部分。最后,添加了图表的标题、坐标轴标签以及图例,使得直方图更加直观易懂。注意,这里根据实际需要调整了density
和cumulative
参数的值,如果需要显示累积频率,可以将cumulative
参数设为True
。
结果如下图所示:
5. 饼图
5.1 方法及参数解释
在Matplotlib中,绘制饼图主要使用pyplot
模块中的pie()
方法。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x | 每个扇区的数值数组。这些数值将决定每个扇区的大小。 | array-like | 必需(无默认值) |
labels | 每个扇区对应的标签列表。 | list of strings | None |
colors | 每个扇区的颜色列表。 | list of colors | None |
autopct | 如果不是None ,则用于标记百分比的字符串或格式化函数。 | string or function | None |
shadow | 是否为饼图添加阴影效果。 | boolean | False |
startangle | 起始角度(以度计),逆时针方向从正x轴开始旋转。 | float | 0 |
explode | 将某几个扇区“爆破”出来,使其与中心分离,突出显示。接受一个浮点数数组,对应每个扇区的偏移量。 | array-like | None |
pctdistance | 百分比标签距离圆心的距离系数。 | float | 0.6 |
5.2 代码示例
下面是一个简单的例子,演示如何使用上述参数来创建一个基本的饼图,并展示如何通过颜色、标签、百分比以及“爆破”效果来增强图表的信息表达。
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 数据准备
sizes = [215, 130, 245, 210] # 各部分的大小
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs'] # 各部分的标签
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'] # 自定义颜色
explode = (0.1, 0, 0, 0) # 突出显示第一个扇区# 创建饼图
plt.pie(sizes, labels=labels, colors=colors, explode=explode, autopct='%.2f%%', shadow=True, startangle=140, pctdistance=0.6)# 绘制为圆形
plt.axis('equal')# 添加标题
plt.title('饼图示例')# 展示图表
plt.show()
这段代码首先定义了四个分类(‘Frogs’, ‘Hogs’, ‘Dogs’, ‘Logs’)以及它们对应的数值(sizes
),然后指定了每部分的颜色(colors
),并通过explode
参数使得第一部分稍微脱离中心,以达到突出显示的效果。autopct='%1.1f%%'
用于在饼图上显示各部分所占比例,精确到小数点后一位。此外,还启用了阴影效果(shadow=True
)并设置了起始角度(startangle=140
),让饼图更具视觉吸引力。最后,通过调用plt.axis('equal')
确保饼图是圆形而非椭圆形,这样可以保证图形的比例正确。
结果如下图所示:
6. 面积图
6.1 方法及参数解释
在Matplotlib中,面积图可以通过pyplot
模块的fill_between()
方法来创建。这种方法主要用于在两条水平曲线之间填充颜色,通常用于绘制连续数据集的上下界或者单个数据集的置信区间。不过,最常用的情况是绘制一个简单的面积图以展示数据随时间变化的趋势。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x | x轴的数据数组。 | array-like | 必需(无默认值) |
y1 | y轴的第一个数据数组,定义了要填充的顶部边界。 | array-like | 必需(无默认值) |
y2 | y轴的第二个数据数组,定义了要填充的底部边界。如果为0,则表示从x轴开始填充。 | array-like/0 | 0 |
where | 一个布尔掩码数组,指示哪些区域需要填充。 | array-like of bool | None |
interpolate | 如果为True,并且指定了where ,则会在交点处进行插值以便更精确地填充。 | boolean | False |
step | 如果不是None ,则创建阶梯形填充。接受{‘pre’, ‘post’, ‘mid’}之一。 | {‘pre’, ‘post’, ‘mid’} | None |
color | 填充区域的颜色。 | color | None |
6.2 代码示例
以下是一个使用fill_between()
方法创建面积图的简单例子,展示了如何利用这个方法来可视化一组数据的变化趋势,并通过颜色填充使图表更加直观。
import matplotlib.pyplot as plt
import numpy as np# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 数据准备
x = np.linspace(0, 2 * np.pi, 100) # 生成等间隔数作为x轴数据
y1 = np.sin(x) # 第一组数据:正弦波
y2 = np.cos(x) # 第二组数据:余弦波# 创建图形和坐标轴
fig, ax = plt.subplots()# 绘制并填充面积图
ax.fill_between(x, y1, y2, where=(y1 > y2), interpolate=True, color='green', alpha=0.5)
ax.fill_between(x, y1, y2, where=(y1 <= y2), interpolate=True, color='red', alpha=0.5)# 设置图表标题和坐标轴标签
ax.set_title('正弦与余弦波之间的面积')
ax.set_xlabel('角度 (弧度)')
ax.set_ylabel('振幅')# 显示图表
plt.show()
在这个例子中,我们首先使用numpy
生成了一组等间隔的x轴数据,然后计算了对应的正弦(y1
)和余弦(y2
)值。接下来,我们用fill_between()
方法分别在这两组数据之间进行填充,其中当y1 > y2
时用绿色表示,而当y1 <= y2
时用红色表示。此外,我们设置了alpha
参数来调整填充颜色的透明度,使得两种颜色在重叠部分显得更加自然。最后,给图表添加了标题以及坐标轴标签,以增强其可读性。
结果如下图所示:
7. 箱线图
7.1 方法及参数解释
箱线图(Box Plot),又称为盒子图或箱型图,是一种用作显示一组数据分布情况的统计图形。它能够显示出一组数据的最大值、最小值、中位数、上下四分位数以及异常值。Matplotlib提供了boxplot()
函数来创建箱线图。
以下是boxplot()
方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x | 要绘制的数据,可以是数组、列表或DataFrame等。 | array-like | 必需(无默认值) |
notch | 是否以凹口形式展示中位数。如果为True,则会在中位数位置产生一个小凹口。 | boolean | False |
sym | 异常值的标记样式。如果不希望显示异常值,可以将其设置为None。 | str | 'b+' |
vert | 指定箱子的方向。如果是True,则垂直方向绘制;如果是False,则水平方向绘制。 | boolean | True |
whis | 定义须覆盖的数据范围。它可以是一个数值,表示基于IQR(四分位距)的倍数;也可以是[0,100]区间内的两个数值,表示百分位数。 | float or (float, float) | 1.5 |
positions | 箱线图在绘图区域中的位置。 | array-like | [1, 2, ..., n] |
widths | 箱线图的宽度。 | scalar or array-like | None |
patch_artist | 如果为True,则使用填充箱体而不是仅绘制边框。 | boolean | False |
7.2 代码示例
下面的例子展示了如何使用matplotlib.pyplot
模块中的boxplot()
函数来绘制一组随机数据的箱线图,并通过调整一些参数来自定义图表外观。
import matplotlib.pyplot as plt
import numpy as np# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 数据准备:生成三组正态分布的随机数据
np.random.seed(0) # 为了可重复性设置随机种子
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(2, 3, 100)
data3 = np.random.normal(-3, 2, 100)data = [data1, data2, data3]# 创建箱线图
plt.boxplot(data, notch=True, sym='rs', vert=False, whis=1.5, positions=[1, 2, 3], widths=0.5, patch_artist=True)# 添加标题和坐标轴标签
plt.title('多组数据的箱线图')
plt.xlabel('值')
plt.ylabel('样本组')# 填充箱体颜色
for patch in plt.gca().patches:patch.set_facecolor("lightblue")# 显示图表
plt.show()
在这个例子中,我们首先利用numpy
生成了三组符合不同正态分布的随机数据。然后调用plt.boxplot()
函数来创建箱线图,并设置了多个参数来定制化图表:
notch=True
:在中位数处添加一个凹口。sym='rs'
:指定异常值的标记样式为红色方形。vert=False
:将箱线图横向绘制。whis=1.5
:设置须的长度,默认为1.5倍的IQR。widths=.5
:设置箱体的宽度。patch_artist=True
:使用填充箱体。
最后,我们遍历所有箱体并设置其颜色为浅蓝色,增加了图表的视觉效果,并通过plt.show()
函数显示最终结果。
结果如下图所示:
8. 等高线图
8.1 方法及参数解释
等高线图(Contour Plot)是一种用于展示三维数据的二维图形,特别适用于表示地形高度、温度分布等随两个变量变化的数据。在Python中,Matplotlib库提供了创建等高线图的功能,主要通过contour()
或contourf()
函数来实现。前者用于绘制等高线,后者用于填充颜色。
以下是contour()
和contourf()
方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
X , Y , Z | 数据输入,分别代表x轴、y轴坐标以及对应的z值(即高度或者强度)。通常使用meshgrid生成。 | array-like | 必需(无默认值) |
levels | 指定等高线的数量或者是具体的等高线位置。如果是一个整数,则表示等高线的数量;如果是一个序列,则表示等高线的具体位置。 | int or array-like | 除非提供,否则自动确定 |
colors | 线条的颜色或者颜色列表。如果提供了cmap 参数,则此参数无效。 | color string or sequence of colors | 依据当前色板 |
cmap | 使用matplotlib色带指定颜色映射。仅当未指定colors 时有效。 | str or Colormap | None |
linewidths | 线宽,可以是单个数值应用到所有等高线,也可以是一个数组为每条线指定不同的宽度。 | float or array-like | None |
alpha | 图形的透明度(0.0为完全透明,1.0为完全不透明)。 | float | None |
8.2 代码示例
下面的例子展示了如何使用matplotlib.pyplot
模块中的contour()
和contourf()
函数来绘制等高线图,并通过调整一些参数来自定义图表外观。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 数据准备:生成网格数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2) # 计算每个点的高度值# 创建基础图像
fig, ax = plt.subplots(1, 2, figsize=(14, 6))# 绘制等高线图
contour = ax[0].contour(X, Y, Z, levels=10, cmap='viridis')
ax[0].clabel(contour, inline=True, fontsize=8) # 在等高线上标注高度值
ax[0].set_title('等高线图')# 绘制带有填充颜色的等高线图
contourf = ax[1].contourf(X, Y, Z, levels=10, cmap='magma')
fig.colorbar(contourf, ax=ax[1]) # 添加颜色条以显示对应关系
ax[1].set_title('带有填充颜色的等高线图')# 显示图表
plt.show()
在这个例子中,我们首先利用numpy
生成了一个从-5到5范围内的100个点的一维数组x
和y
,然后使用np.meshgrid()
函数生成了网格数据X
和Y
。接着计算了每个网格点的高度值Z
,这里使用的是简单的欧几里得距离公式作为演示。
随后,我们创建了一个包含两个子图的基础图像,分别调用了contour()
和contourf()
函数来绘制等高线图和带有填充颜色的等高线图。对于contour()
函数,我们使用clabel()
函数在等高线上添加了高度值标签;而对于contourf()
函数,则通过fig.colorbar()
函数添加了一个颜色条,以便于理解不同颜色所代表的高度值区间。最后,通过plt.show()
函数显示最终结果。
结果如下图所示:
9. 3D图
9.1 3D散点图
3D散点图是一种用于在三维空间中展示数据点的图表类型,它允许观察数据之间的关系以及模式。这种图表对于探索两个以上变量之间的相互作用特别有用。
9.1.1 方法及参数解释
在Matplotlib中,通过Axes3D.scatter()
方法可以创建3D散点图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
xs | x轴坐标的数据数组。 | array-like | 必需(无默认值) |
ys | y轴坐标的数据数组。 | array-like | 必需(无默认值) |
zs | z轴坐标的数据数组。 | array-like | 必需(无默认值) |
s | 散点大小,标量或数组。 | scalar or array-like | 20 |
c | 颜色,可以是单一颜色格式字符串,也可以是一个颜色序列。 | color or sequence of color | 'b' |
depthshade | 是否对散点进行深度着色处理,以增强3D效果。 | bool | True |
label | 图例标签,用于在图例中标识数据集。 | str | None |
alpha | 点的透明度,范围从0(完全透明)到1(完全不透明)。 | float | None |
xs
,ys
,zs
: 分别代表数据点在x、y和z轴上的坐标。s
: 控制散点的大小,可以为所有点设置相同的大小或单独指定每个点的大小。c
: 设置散点的颜色,可以使用单一颜色或者根据数据点的不同来设置不同的颜色。depthshade
: 通过调整颜色的亮度来给散点添加深度效果,使得更远的点看起来比近的点更暗淡,从而增强立体感。label
: 为绘制的数据点设置标签,方便在图例中识别。alpha
: 控制散点的透明度,有助于解决重叠点的可见性问题。
9.1.2 代码示例
下面的例子演示了如何使用上述参数来创建一个基本的3D散点图,并展示如何通过自定义设置增强图表的信息表达。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 准备数据
np.random.seed(42)
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)# 创建图形和坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制3D散点图
scatter = ax.scatter(x, y, z, s=50, c=x+y+z, cmap='viridis', depthshade=True, alpha=0.6)# 添加颜色条,表示数值与颜色的关系
color_bar = fig.colorbar(scatter, ax=ax, shrink=0.5, aspect=5)
color_bar.set_label('X+Y+Z 的值')# 添加标题和坐标轴标签
ax.set_title('3D散点图示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')# 显示图表
plt.show()
在这段代码中,我们首先准备了一组随机生成的数据x
, y
, 和 z
,然后使用scatter()
函数在一个3D坐标系中绘制了这些数据点。通过设置s
参数控制点的大小,c
参数根据每个点的x、y、z坐标之和来决定颜色,并利用cmap
参数选择了一个颜色映射(‘viridis’),同时设置了透明度alpha
来增加视觉效果。此外,还通过fig.colorbar()
添加了一个颜色条来帮助理解颜色所对应的数值。最后,通过调用plt.show()
函数显示最终结果。这样就可以直观地观察数据在三维空间中的分布情况了。
结果如下图所示:
9.2 3D线框图
3D线框图是一种用于展示三维表面的图表类型,它通过连接定义表面上各点的线条来形成网格结构。这种类型的图表非常适合用来表示数学函数或数据集之间的关系。
9.2.1 方法及参数解释
在Matplotlib中,可以使用Axes3D.plot_wireframe()
方法创建3D线框图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
X , Y , Z | 分别代表x、y和z轴的数据数组,描述了3D空间中的位置。 | 2D array-like | 必需(无默认值) |
rstride | 确定沿行方向绘制线框的步长,即跳过多少行后绘制一条线。 | int | 1 |
cstride | 确定沿列方向绘制线框的步长,即跳过多少列后绘制一条线。 | int | 1 |
color | 线框的颜色。 | color | 'C0' |
linewidth | 线宽。 | float | None |
antialiased | 是否开启抗锯齿效果,使线条更加平滑。 | bool | True |
label | 图例标签,用于在图例中标识数据集。 | str | None |
X
,Y
,Z
: 这三个参数是必需的,它们分别代表了线框图在x、y和z轴上的坐标信息。rstride
,cstride
: 控制线框的密度,数值越大,生成的网格越稀疏。color
: 设置线框的颜色。linewidth
: 调整线宽,可以增加或减小线条的粗细。antialiased
: 开启或关闭抗锯齿功能,以改善视觉质量。label
: 为绘制的线框设置标签,方便在图例中识别。
9.2.2 代码示例
下面的例子演示了如何使用上述参数来创建一个基本的3D线框图,并展示了如何自定义这些设置以增强图形的表现力。
import matplotlib.pyplot as plt
import numpy as np# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 创建测试数据
def f(x, y):return np.sin(np.sqrt(x ** 2 + y ** 2))x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
x, y = np.meshgrid(x, y)
z = f(x, y)# 创建图形和坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制3D线框图
ax.plot_wireframe(x, y, z, rstride=2, cstride=2, color='blue', linewidth=0.5, antialiased=True)# 添加标题和坐标轴标签
ax.set_title('3D线框图示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')# 显示图表
plt.show()
在这段代码中,我们首先定义了一个函数f(x, y)
来生成z轴的数据,然后使用np.meshgrid
创建了x和y轴的数据网格。接着,使用plot_wireframe()
方法绘制了3D线框图,设置了rstride
和cstride
来调整线框的密度,同时指定了线框的颜色(color
)、宽度(linewidth
)以及是否启用抗锯齿(antialiased
)。最后,通过添加标题和坐标轴标签来完善图表的信息表达,并调用plt.show()
显示最终结果。这样就可以直观地观察到数据在三维空间中的分布情况了。
结果如下图所示:
9.3 3D曲面图
3D曲面图是一种用于可视化三维数据的图表类型,它能够有效地展示一个函数或数据集在两个维度上的变化。与线框图相比,曲面图通过填充表面区域提供了更加直观和丰富的视觉效果。
9.3.1 方法及参数解释
在Matplotlib中,可以使用Axes3D.plot_surface()
方法创建3D曲面图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
X , Y , Z | 分别代表x、y和z轴的数据数组,描述了3D空间中的位置。 | 2D array-like | 必需(无默认值) |
rstride | 确定沿行方向绘制曲面的步长,即跳过多少行后绘制一条线。 | int | 10 |
cstride | 确定沿列方向绘制曲面的步长,即跳过多少列后绘制一条线。 | int | 10 |
color | 曲面的颜色。如果未指定,则根据colormap来着色。 | color | None |
cmap | 颜色映射方案,适用于曲面上色。 | Colormap | None |
facecolors | 每个面的自定义颜色列表,优先级高于cmap 。 | 2D array-like | None |
linewidth | 线宽。 | float | None |
antialiased | 是否开启抗锯齿效果,使线条更加平滑。 | bool | True |
shade | 是否对曲面进行阴影处理,默认为True 。 | bool | True |
X
,Y
,Z
: 这三个参数是必需的,它们分别代表了曲面图在x、y和z轴上的坐标信息。rstride
,cstride
: 控制曲面的密度,数值越大,生成的网格越稀疏。color
,cmap
,facecolors
: 设置曲面的颜色或颜色映射方案。若同时指定了color
和cmap
,则color
优先;facecolors
具有最高优先级。linewidth
: 调整曲面边缘线条的粗细。antialiased
: 开启或关闭抗锯齿功能,以改善视觉质量。shade
: 决定是否给曲面添加阴影效果,增强立体感。
9.3.2 代码示例
下面的例子展示了如何利用上述参数创建一个基本的3D曲面图,并演示了如何自定义这些设置以达到不同的视觉效果。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 创建测试数据
def f(x, y):return np.sin(np.sqrt(x ** 2 + y ** 2))x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
x, y = np.meshgrid(x, y)
z = f(x, y)# 创建图形和坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制3D曲面图
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)# 添加颜色条
fig.colorbar(surf, shrink=0.5, aspect=5)# 添加标题和坐标轴标签
ax.set_title('3D曲面图示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')# 显示图表
plt.show()
在这段代码中,我们同样首先定义了一个函数f(x, y)
来生成z轴的数据,然后使用np.meshgrid
创建了x和y轴的数据网格。接着,使用plot_surface()
方法绘制了3D曲面图,设置了rstride
和cstride
来调整曲面的密度,选择了cm.coolwarm
作为颜色映射方案(cmap
),并关闭了边缘线条(linewidth=0
)和抗锯齿效果(antialiased=False
)。此外,还通过fig.colorbar()
添加了一个颜色条来帮助理解曲面上颜色所代表的数值大小。最后,通过添加标题和坐标轴标签来完善图表的信息表达,并调用plt.show()
显示最终结果。这样就可以直观地观察到数据在三维空间中的分布情况了。
结果如下图所示:
10. 热力图
热力图是一种数据可视化技术,通过颜色的变化来表示数据的大小或密度。
10.1 方法及参数解释
在Matplotlib中,可以通过imshow()
函数来创建热力图。这种方法非常适合用来展示二维数组中的数据分布情况。
以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
X | 要绘制的数据矩阵,通常是一个二维数组。 | array-like | 必需(无默认值) |
cmap | 颜色映射表,决定了不同数值所对应的颜色。常见的颜色映射包括 'viridis' , 'plasma' , 'inferno' , 'magma' , 'coolwarm' 等。 | str or Colormap | 'viridis' |
aspect | 控制图像的纵横比,可以是 'auto' , 'equal' 或者一个具体的数字值。 | {‘auto’, ‘equal’} or float | 'auto' |
interpolation | 插值方法,用于平滑图像。例如 'nearest' , 'bilinear' , 'bicubic' 等。如果设置为 None ,则不会应用任何插值。 | str or None | 'antialiased' |
origin | 决定了 [0,0] 点位于图像的左上角 (‘upper’) 还是左下角 (‘lower’)。 | {‘upper’, ‘lower’} | 'upper' |
extent | 图像在数据空间中的范围,格式为 (left, right, bottom, top)。这可以用来调整坐标轴的范围。 | list of float | None |
alpha | 图像的透明度,取值范围从 0(完全透明)到 1(完全不透明)。 | float | None |
10.2 代码示例
下面的例子展示了如何使用matplotlib.pyplot.imshow()
函数来创建一个基本的热力图,并通过调整一些参数来自定义图表外观。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 创建一些测试数据
data = np.random.rand(10, 10)# 创建图形和子图
fig, ax = plt.subplots()# 绘制热力图
heatmap = ax.imshow(data, cmap='viridis', aspect='auto', interpolation='nearest', origin='lower')# 添加颜色条以显示颜色与数值之间的关系
plt.colorbar(heatmap)# 设置标题和坐标轴标签
ax.set_title('热力图示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')# 显示图表
plt.show()
这段代码首先生成了一个10x10大小的随机数二维数组作为数据源。然后使用imshow()
函数绘制了这个数据集的热力图,并设置了颜色映射表为 'viridis'
,确保每个数值都有相应的颜色表示。此外,还指定了图像的纵横比(aspect
)、插值方法(interpolation
)以及坐标原点的位置(origin
)。为了帮助理解颜色与数值之间的关系,我们添加了一个颜色条(colorbar()
)。最后,给图表加上了标题和坐标轴标签,并调用plt.show()
来显示最终结果。这样就可以直观地查看二维数组中的数据分布情况了。
结果如下图所示:
11. 极坐标图
极坐标图是一种使用极坐标系表示数据的图表类型,其中每个点的位置由角度(θ)和半径(r)决定。它非常适合用于展示周期性数据或圆形分布的数据。
11.1 方法及参数解释
下面以表格形式列出绘制极坐标图时常用的方法及其参数解释:
方法/属性 | 参数 | 解释 |
---|---|---|
subplots() | subplot_kw={'projection': 'polar'} | 创建一个极坐标子图,通过设置subplot_kw 字典中的'projection' 为'polar' 来实现。 |
plot(theta, r) | theta , r | 在当前子图上绘制极坐标图,theta 是角度数组,通常以弧度为单位;r 是对应于每个角度的半径长度。 |
set_theta_zero_location(location) | location | 设置极坐标的角度0°位置,location 可以是'N' (顶部)、'S' (底部)、'E' (右侧,默认)、'W' (左侧)等。 |
set_theta_direction(direction) | direction | 指定角度增加的方向,direction=1 表示顺时针方向,direction=-1 表示逆时针方向(默认)。 |
set_rticks(ticks) | ticks | 设置极坐标图中半径轴上的刻度值列表。 |
set_rlabel_position(position) | position | 设置半径标签相对于极坐标的角度位置,position 是一个角度值。 |
11.2 代码示例
以下代码演示了如何使用Matplotlib创建一个简单的极坐标图,并应用上述方法进行自定义设置:
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 准备数据
theta = np.linspace(0, 2 * np.pi, 100) # 角度范围从0到2π
r = np.abs(np.sin(3 * theta)) # 半径根据正弦函数变化# 创建图形和极坐标子图
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})# 绘制极坐标图
ax.plot(theta, r)# 自定义设置
ax.set_theta_zero_location('N') # 将角度0设在顶部
ax.set_theta_direction(-1) # 角度增长方向设为逆时针
ax.set_rticks([0.5, 1.0, 1.5]) # 设置半径刻度
ax.set_rlabel_position(60) # 设置半径标签的位置# 添加标题
ax.set_title("一个基本的极坐标图", va='bottom')# 显示图表
plt.show()
此代码段首先导入了必要的库,并准备了一组数据用于绘制极坐标图。然后,通过调用plt.subplots()
并指定subplot_kw={'projection': 'polar'}
来创建一个极坐标子图。接下来,利用plot()
方法基于给定的theta
和r
数据绘制图形,并通过各种方法对图表进行进一步的定制,如调整角度起点位置、方向、半径刻度以及半径标签的位置。最后,显示该极坐标图。
结果如下图所示:
12. 误差棒图
误差棒图是一种用于展示数据变异程度或不确定性的图表。它不仅显示了测量值本身,还通过误差棒展示了这些值的波动范围或置信区间。
12.1 方法及参数解释
在Matplotlib中,使用errorbar()
函数可以创建误差棒图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x , y | 数据点的位置坐标,分别对应于横轴和纵轴坐标。 | array-like | 必需(无默认值) |
yerr , xerr | 分别指定在y轴方向和x轴方向上的误差量。可以是一个数值(所有点使用相同的误差)、一个数组(每个点有一个对应的误差值),或者是两个数组(分别表示正负误差)。 | scalar or array-like | None |
fmt | 线型、颜色或标记类型的格式字符串,如 'ro-' 表示红色圆圈标记连接的线条。 | str | 'none' |
ecolor | 误差棒的颜色。如果未指定,则使用fmt 中的颜色。 | color | None |
elinewidth | 误差棒的线条宽度。 | float | None |
capsize | 误差棒末端的帽大小,单位是点(如果为0则不显示帽子)。 | float | 0 |
capthick | 误差棒末端帽子的厚度。 | float | None |
barsabove | 是否将误差棒绘制在数据点之上。 | bool | False |
12.2 代码示例
以下是一个简单的例子,演示如何使用上述参数来创建一个基本的误差棒图,并展示如何通过颜色、线宽以及误差棒的帽大小等参数增强图表的信息表达。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 准备数据
x = np.array([0, 1, 2, 3, 4])
y = np.array([2, 5, 3, 6, 4])# 误差数据
yerr = np.array([0.5, 1.0, 0.7, 1.2, 0.8]) # y方向的误差
xerr = 0.2 # x方向的固定误差# 创建图形和坐标轴
fig, ax = plt.subplots()# 绘制误差棒图
ax.errorbar(x, y, yerr=yerr, xerr=xerr, fmt='o-', ecolor='red', elinewidth=2, capsize=5, capthick=2, label='数据与误差')# 添加标题和坐标轴标签
ax.set_title('误差棒图示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')# 显示图例
ax.legend()# 显示图表
plt.show()
在这段代码中,我们首先准备了一组数据点x
和y
,以及它们各自的误差值yerr
和xerr
。然后,使用errorbar()
函数绘制了一个误差棒图,并设置了多个参数以自定义图表外观:
fmt='o-'
:使用圆形标记并用线连接。ecolor='red'
:设置误差棒的颜色为红色。elinewidth=2
:设置误差棒的线条宽度为2。capsize=5
:设置误差棒末端帽子的大小为5点。capthick=2
:设置误差棒末端帽子的厚度为2。
此外,还添加了标题、坐标轴标签以及图例,以便更好地理解图表内容。最后,通过调用plt.show()
函数显示最终结果。
结果如下图所示:
13. 阶梯图
阶梯图(Step Plot)是一种特殊的线形图,它通过一系列水平和垂直的线段来连接数据点,形成“阶梯”状的效果。这种图表非常适合用于展示离散数据的变化趋势。
13.1 方法及参数解释
在Matplotlib中,使用step()
函数可以创建阶梯图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
x , y | 数据点的位置坐标,分别对应于横轴和纵轴坐标。 | array-like | 必需(无默认值) |
where | 指定台阶连接的方式,可选值有 'pre' , 'post' , 'mid' 。 | {‘pre’, ‘post’, ‘mid’} | 'pre' |
fmt | 线型、颜色或标记类型的格式字符串,如 'ro-' 表示红色圆圈标记连接的线条。 | str | 'b-' |
label | 图例标签,用于标识数据序列。 | str | None |
linewidth | 线宽。 | float | None |
color | 线条的颜色。 | color | None |
alpha | 图形的透明度,取值范围从0(完全透明)到1(完全不透明)。 | float | None |
where
: 决定了台阶如何连接数据点:'pre'
: 在每个数据点之前开始新的台阶。'post'
: 在每个数据点之后开始新的台阶。'mid'
: 尝试在两个数据点中间开始新的台阶,仅适用于drawstyle='steps-mid'
。
13.2 代码示例
以下是一个简单的例子,演示如何使用上述参数来创建一个基本的阶梯图,并展示如何通过颜色、线宽以及台阶连接方式等参数增强图表的信息表达。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 准备数据
x = np.arange(1, 7)
y = np.array([1, 3, 2, 5, 4, 6])# 创建图形和坐标轴
fig, ax = plt.subplots()# 绘制阶梯图
ax.step(x, y, where='pre', linestyle='-', marker='o', color='green', linewidth=2, label='预设台阶')# 使用不同的台阶连接方式绘制另一个阶梯图
ax.step(x, y + 2, where='post', linestyle='--', marker='s', color='blue', linewidth=2, label='后置台阶')# 添加标题和坐标轴标签
ax.set_title('阶梯图示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')# 显示图例
ax.legend()# 显示图表
plt.show()
在这段代码中,我们首先准备了一组数据点x
和y
。然后,使用step()
函数绘制了两个阶梯图,并设置了多个参数以自定义图表外观:
- 第一个阶梯图使用了
where='pre'
选项,意味着在每个数据点之前开始新的台阶,并设置了线型为实线('-'
),标记为圆形('o'
),颜色为绿色('green'
),线宽为2。 - 第二个阶梯图使用了
where='post'
选项,意味着在每个数据点之后开始新的台阶,并设置了线型为虚线('--'
),标记为方形('s'
),颜色为蓝色('blue'
),线宽也为2。
此外,还添加了标题、坐标轴标签以及图例,以便更好地理解图表内容。最后,通过调用plt.show()
函数显示最终结果。这样就可以直观地比较不同数据序列的趋势变化了。
结果如下图所示:
14. 矢量图
矢量图(Vector Plot)是一种用于表示二维向量场的图表类型,每个点都有一个对应的箭头,显示该点上的向量大小和方向。在科学计算和工程应用中非常有用,例如流体力学、电磁场分析等领域。
14.1 方法及参数解释
在Matplotlib库中,可以使用quiver()
函数来创建矢量图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
X , Y | 向量起点的x, y坐标数组。 | array-like | 必需(无默认值) |
U , V | 向量在x, y方向的分量数组。 | array-like | 必需(无默认值) |
C | 控制颜色的数据,可选。 | array-like | None |
pivot | 定义箭头尾部或头部的位置相对于(X,Y),可选值有 'tail' , 'middle' , 'tip' 。 | {‘tail’, ‘middle’, ‘tip’} | 'tail' |
scale | 数据单位与绘图区域之间的比例因子,可用来调整箭头的长度。 | float | 自动选择 |
units | 指定箭头尺寸单位,如 'width' , 'height' , 'dots' , 'inches' 等。 | str | 'width' |
color | 箭头的颜色,可以是单一颜色也可以是一个颜色序列。 | color or sequence of colors | None |
alpha | 图形的透明度,取值范围从0(完全透明)到1(完全不透明)。 | float | None |
pivot
: 决定了箭头的哪一部分位于给定的(X,Y)
坐标上。'tail'
: 箭头尾部位于坐标点。'middle'
: 箭头中间位于坐标点。'tip'
: 箭头尖端位于坐标点。
14.2 代码示例
下面是一个简单的例子,演示如何使用上述参数来创建一个基本的矢量图,并展示如何通过颜色、比例因子以及箭头位置等参数增强图表的信息表达。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 创建网格数据
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)# 创建图形和坐标轴
fig1, ax1 = plt.subplots()
ax1.set_title('矢量图示例')
ax1.set_xlabel('X轴')
ax1.set_ylabel('Y轴')# 绘制矢量图
Q = ax1.quiver(X, Y, U, V, units='width', pivot='mid', color='r', scale=1 / 0.05)# 添加随机点处的向量作为参考
random_x = np.random.rand(5) * 2 * np.pi
random_y = np.random.rand(5) * 2 * np.pi
ax1.quiver(random_x, random_y, np.cos(random_x), np.sin(random_y), color='blue', scale=1 / 0.05)# 显示图表
plt.show()
在这段代码中,我们首先创建了一个网格数据集X
和Y
,然后根据这些坐标点计算了相应的向量分量U
和V
。接下来,使用quiver()
函数绘制了矢量图,并设置了多个参数以自定义图表外观:
- 使用
units='width'
指定了箭头尺寸单位为绘图宽度。 pivot='mid'
让箭头中心位于指定的坐标点上。- 设置了颜色为红色(
'r'
),并通过scale=1 / 0.05
调整了箭头的比例因子,使其更加清晰可见。 - 另外,还在随机选取的几个点上添加了蓝色的向量,以便于比较不同位置上的向量场特性。
最后,通过调用plt.show()
函数显示最终结果。这样就可以直观地观察向量场的变化趋势了。
结果如下图所示:
15. 小提琴图
小提琴图(Violin Plot)是一种结合了箱线图和密度图特性的图表,它展示了数据分布的密度以及数据的基本统计信息(如中位数、四分位数等)。小提琴图对于比较不同组的数据分布非常有用。
15.1 方法及参数解释
在Matplotlib中,可以通过violinplot()
函数来创建小提琴图。以下是该方法的一些关键参数及其解释:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
dataset | 要绘制的数据集,可以是一个数组或列表,也可以是包含多个数据集的列表。 | array-like or a list of array-like | 必需(无默认值) |
positions | 每个小提琴图在x轴上的位置。 | array-like | [1, 2, ..., n] |
vert | 如果为True,则垂直方向绘制;如果为False,则水平方向绘制。 | bool | True |
widths | 小提琴图的宽度。 | scalar or array-like | 0.5 |
showmeans | 是否显示均值。 | bool | False |
showmedians | 是否显示中位数。 | bool | False |
showextrema | 是否显示极值(最大值和最小值)。 | bool | True |
bw_method | 用于计算KDE(核密度估计)的方法或带宽缩放因子。 | scalar or str | 'scott' |
dataset
: 数据输入,支持单个数据集或者一组数据集。positions
: 定义每个小提琴图的位置,通常对应于分类变量的不同类别。vert
: 控制图形的方向,垂直或水平。widths
: 控制小提琴图的宽度,可以使所有小提琴图具有相同的宽度,也可以为每个小提琴图指定不同的宽度。showmeans
,showmedians
,showextrema
: 控制是否在图表上显示平均值、中位数以及极端值。
15.2 代码示例
下面的例子演示了如何使用上述参数来创建一个基本的小提琴图,并展示如何通过自定义设置增强图表的信息表达。
import numpy as np
import matplotlib.pyplot as plt# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 准备数据
np.random.seed(10)
data = [np.random.normal(0, std, 100) for std in range(1, 5)]# 创建图形和坐标轴
fig, ax = plt.subplots()# 绘制小提琴图
parts = ax.violinplot(data, showmeans=True, showmedians=True, showextrema=True)# 自定义颜色
for pc in parts['bodies']:pc.set_facecolor('lightblue')pc.set_edgecolor('black')pc.set_alpha(1)# 显示中位数
parts['cmedians'].set_color('blue')
parts['cmedians'].set_linestyle('--')# 添加标题和坐标轴标签
ax.set_title('小提琴图示例')
ax.set_xlabel('样本组')
ax.set_ylabel('值')# 设置x轴刻度标签
ax.get_xaxis().set_tick_params(direction='out')
ax.xaxis.set_ticks_position('bottom')
ax.set_xticks(np.arange(1, len(data) + 1))
ax.set_xticklabels(['A', 'B', 'C', 'D'])# 显示图表
plt.show()
在这段代码中,我们首先准备了一组数据data
,这些数据是从不同标准差的正态分布中随机抽取的样本。然后,使用violinplot()
函数绘制了一个小提琴图,并设置了多个参数以自定义图表外观:
- 通过
showmeans=True
,showmedians=True
, 和showextrema=True
控制了是否显示平均值、中位数以及极端值。 - 对每个小提琴图的身体部分进行了颜色和透明度的自定义设置。
- 使用蓝色虚线显示中位数。
- 添加了标题、坐标轴标签,并对x轴刻度进行了定制,使得每个小提琴图代表不同的样本组。
最后,通过调用plt.show()
函数显示最终结果。这样就可以直观地比较不同样本组的数据分布情况了。
结果如下图所示:
七、Matplotlib多图绘制
1. 子图(subplots()
)
子图(subplots)允许在同一个窗口中绘制多个图表,这对于比较不同数据集或展示同一数据集的不同方面非常有用。
1.1 方法及参数解释
在Matplotlib中,创建子图最常用的方法是subplot()
和subplots()
。这里主要介绍subplots()
方法,因为它提供了更大的灵活性。
使用的方法:
fig, axes = plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
参数名 | 描述 |
---|---|
nrows | 子图的行数,默认为1。 |
ncols | 子图的列数,默认为1。 |
sharex | 如果为True,则所有子图共享X轴。可选值有'none' , 'all' , 'row' , 'col' 。 |
sharey | 类似于sharex ,但针对Y轴。 |
squeeze | 布尔值。如果为True,并且只有一个子图,则返回的axes对象不是数组;如果有多个子图,则根据布局返回相应的数组。 |
subplot_kw | 字典类型,传递给每个子图构造函数的关键字参数。 |
gridspec_kw | 字典类型,传递给GridSpec构造函数的关键字参数,用于更复杂的布局控制。 |
**fig_kw | 其他关键字参数,传递给图形创建函数。 |
fig
: 返回的Figure对象。axes
: 根据nrows
和ncols
返回一个Axes对象或Axes对象数组。
1.2 代码示例
以下是一个简单的例子,演示如何使用subplots()
来创建并定制子图:
import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 创建2x1的子图网格
fig, axes = plt.subplots(nrows=2, ncols=1)# 绘制第一个子图
axes[0].plot(x, y1, 'r') # 红色线条表示sin(x)
axes[0].set_title('Sine Wave')
axes[0].set_ylabel('Sin(x)')# 绘制第二个子图
axes[1].plot(x, y2, 'b') # 蓝色线条表示cos(x)
axes[1].set_title('Cosine Wave')
axes[1].set_xlabel('X axis')
axes[1].set_ylabel('Cos(x)')# 自动调整子图参数以适应
plt.tight_layout()# 显示图形
plt.show()
在这个示例中,我们首先生成了一些数据,然后使用subplots()
创建了一个包含两个子图的网格。通过设置nrows=2
和ncols=1
,我们得到了垂直排列的两个子图。接着,我们在每个子图上分别绘制了正弦波和余弦波,并对它们进行了基本的定制(如颜色、标题和坐标轴标签)。最后,我们调用了plt.tight_layout()
来自动调整子图之间的间距,避免重叠问题,保证显示效果清晰美观。
结果如下图所示:
2. 子图(subplot()
)
在Matplotlib中,subplot()
是一个用于创建子图的便捷函数,它允许用户在一个图形窗口中布局多个图表。
2.1 方法及参数解释
使用subplot()
的基本形式如下:
plt.subplot(nrows, ncols, index, **kwargs)
参数名 | 描述 |
---|---|
nrows | 子图的行数。 |
ncols | 子图的列数。 |
index | 当前子图的位置索引,从1开始计数,顺序为从上到下、从左到右。 |
**kwargs | 其他关键字参数,可以用来进一步定制子图的属性。 |
nrows
,ncols
: 定义了一个网格布局,例如subplot(2, 3, 1)
表示创建一个2行3列的子图网格,并选中第一个子图进行操作。index
: 表示当前激活的子图编号。注意,索引是从1开始的。**kwargs
: 可以接受一些额外的参数来调整子图的样式等,不过通常直接使用的较少。
2.2 代码示例
下面是一个简单的例子,演示如何使用subplot()
来创建并展示两个子图:
import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 第一个子图
plt.subplot(2, 1, 1) # 2行1列的第一个子图
plt.plot(x, y1, 'r') # 红色线条表示sin(x)
plt.title('Sine Wave')
plt.ylabel('Sin(x)')# 第二个子图
plt.subplot(2, 1, 2) # 2行1列的第二个子图
plt.plot(x, y2, 'b') # 蓝色线条表示cos(x)
plt.title('Cosine Wave')
plt.xlabel('X axis')
plt.ylabel('Cos(x)')# 自动调整子图参数以适应
plt.tight_layout()# 显示图形
plt.show()
在这个示例中,我们首先导入了必要的库并生成了一些用于绘图的数据。接着,通过调用subplot(2, 1, 1)
和subplot(2, 1, 2)
分别创建了上下排列的两个子图,并在每个子图上绘制了不同的波形(正弦波和余弦波)。此外,我们还为每个子图设置了标题和坐标轴标签,并通过plt.tight_layout()
自动调整了子图之间的间距,确保它们不会重叠,从而获得清晰美观的显示效果。
结果如下图所示: