Python数据可视化 - Matplotlib教程
文章目录
- 前言
- 一、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()
自动调整了子图之间的间距,确保它们不会重叠,从而获得清晰美观的显示效果。
结果如下图所示:
相关文章:
Python数据可视化 - Matplotlib教程
文章目录 前言一、Matplotlib简介及安装1. Matplotlib简介2. 安装Matplotlib 二、Matplotlib Pyplot1. Pyplot介绍2. Pyplot中方法介绍2.1 创建和管理图形2.2 绘制图形2.3 设置图形属性2.4 保存和展示 三、Matplotlib绘图标记1. 介绍2. 基本用法3. 标记大小与颜色4. 标记样式列…...
集成测试总结文档
1. 集成测试的定义 集成测试(Integration Testing)是在单元测试之后,将多个独立的软件模块或组件组合在一起进行测试的过程,目的是验证这些模块之间的接口、数据传递、协作逻辑是否符合设计要求,并发现因集成引发的缺…...
Retrieval-Augmented Generation for LargeLanguage Models: A Survey
标题:Retrieval-Augmented Generation for Large Language Models: A Survey 作者:Yunfan Gaoa , Yun Xiongb , Xinyu Gaob , Kangxiang Jiab , Jinliu Panb , Yuxi Bic , Yi Daia , Jiawei Suna , Meng Wangc , and Haofen Wang 1. By referencing ext…...
Day3 25/2/16 SUN
【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…...
使用maven-archetype制作项目脚手架
使用maven-archetype制作项目脚手架 maven plugin依赖 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.0.1</version> </plugin>导出模板 在模板项目执行…...
Spring AOP源码解析
前言 Spring AOP(面向切面编程)是 Spring 框架的核心模块之一,其底层通过 动态代理 和 字节码增强 实现。以下是 Spring AOP 的源码解析,涵盖核心流程、关键类及实际应用场。 一、Spring AOP 的核心组件 核心接口 Joinpoint&am…...
1.buuctf [BJDCTF2020]EasySearch
进入题目页面如下 尝试输入弱口令密码都显示错误 看题目是search,扫描一下根目录试试 /index.php.swp 得到源码 进行一下代码审计 <?php//开启输出缓冲,将所有的输出内容先保存到缓冲区,而不是直接输出到浏览器。ob_start();//定义一个…...
小米 R3G 路由器刷机教程(Pandavan)
小米 R3G 路由器刷机教程(Pandavan) 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而,原厂固件的功能相对有限,难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能,还能通过第三方固…...
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析③】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase03 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-003测试用例 用例ID测试场景验证要点参考条款预期…...
deepseek与gpt,核心原理对比
DeepSeek与GPT作为AI大模型,在自然语言处理等领域展现出强大的能力,它们的核心原理对比主要体现在模型架构、训练策略、资源效率以及应用场景优化等方面。 一、模型架构 DeepSeek 混合专家(MoE)框架:DeepSeek采用了混合专家框架,其内部包含多个“专家”子模块,每个子模…...
第1章大型互联网公司的基础架构——1.1 单机房的内部架构
所谓的应用后台就是指机房。机房架构是一个庞大的工程,你可能听说过很多大型互联网公司曾在各种技术峰会上介绍它们的“三地五中心”多机房,甚至是全球异地多活机房等,这些“高大上”的话题讨论的都是机房架构的内容。机房最简单的形式是单机…...
如何在 Vue 3 中使用 Vue Router 和 Vuex
在 Vue 3 中使用 Vue Router 1. 安装 Vue Router 在项目根目录下,通过 npm 或 yarn 安装 Vue Router 4(适用于 Vue 3): npm install vue-router4 # 或者使用 yarn yarn add vue-router42. 创建路由配置文件 在 src 目录下创建…...
网络安全月度报告
3.1.1网络现状及安全挑战 网络的出现给人们的工作和生活带来了极大的便利,但同时也带来了极大的安全风险。在信息传输和交换时,需要对通信信道上传输的机密数据进行加密;在数据存储和共享时,需要对数据库进行安全的访问控制和对访…...
人大金仓国产数据库与PostgreSQL
一、简介 在前面项目中,我们使用若依前后端分离整合人大金仓,在后续开发过程中,我们经常因为各种”不适配“问题,但可以感觉得到大部分问题,将人大金仓视为postgreSQL就能去解决大部分问题。据了解,Kingba…...
Python的imutils库详细介绍
imutils 是一个专为简化OpenCV(计算机视觉库)常见操作而设计的Python工具库,提供了一系列便捷函数,使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍: 1. 安装方法 通过pip安装: p…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第三节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(安全访问0x27服务) 作者:车端域控测试工程师 更新日期:2025-02-12 关键词:UDS安全访问、0x27服务、ISO 14229-1:2023、ECU安全验证 一、服务概述 安全访问服务࿰…...
DeepSeek与医院电子病历的深度融合路径:本地化和上云差异化分析
一、引言 1.1 研究背景与意义 在医疗信息化快速发展的当下,电子病历系统已成为医院信息管理的核心构成。电子病历(EMR)系统,是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图标、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的…...
⚡️《静电刺客的猎杀手册:芯片世界里的“千伏惊魂“》⚡️
前言: 在这个电子产品无孔不入的时代,我们每天都在与一群隐形刺客打交道——它们身怀数千伏特的高压绝技,能在0.1秒内让价值百万的芯片灰飞烟灭。这就是静电放电(ESD),电子工业界最令人闻风丧胆的"沉默…...
GPU 英伟达GPU架构回顾
1999 年,英伟达发明了 GPU(graphics processing unit),本节将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒&#…...
Git 分布式版本控制
Git 是分布式版本控制 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 前言 git基本流程 本地git安装并将bin目录配置到环境变量path中,右键git bash后配置本地用户名与邮箱 git congig --global user.name "" || …...
【网络】协议与网络版计算器
协议与网络版计算器 文章目录 1.协议的概念 1.1序列化与反序列化 2.网络版计算器 2.1封装套接字2.2协议定制 2.2.1Jsoncpp2.2.2报文处理 2.3会话层:TcpServer2.4应用层:Calculate2.5表示层:Service2.6应用层、表示层和会话层->应用层 …...
AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘
云边有个稻草人-CSDN博客 目录 第一章:DeepSeek与ChatGPT的基础概述 1.1 DeepSeek简介 1.2 ChatGPT简介 第二章:模型架构对比 2.1 Transformer架构:核心相似性 2.2 模型规模与参数 第三章:训练方法与技术 3.1 预训练与微调…...
【Python爬虫(5)】HTTP协议:Python爬虫的基石
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
机器学习数学基础:24.随机事件与概率
一、教程目标 本教程致力于帮助零基础或基础薄弱的学习者,全面掌握概率论与数理统计的基础公式,透彻理解核心概念,熟练学会应用解题技巧,最终能够轻松应对期末或考研考试。 二、适用人群 特别适合那些对概率论与数理统计知识了…...
Mongodb数据管理
Mongodb数据管理 1.登录数据库,查看默认的库 [rootdb51~]# mongo> show databases; admin 0.000GB config 0.000GB local 0.000GB> use admin switched to db admin > show tables system.version > admin库:admin 是 MongoDB 的管理…...
vue3响应式丢失解决办法(三)
vue3的响应式的理解,与普通对象的区别(一) vue3 分析总结响应式丢失问题原因(二) 经过前面2篇文章,知道了响应式为什么丢失了,但是还是碰到了丢失情况,并且通过之前的内容还不能解…...
Django中数据库迁移命令
在 Django 中,数据库迁移是确保数据库结构与 Django 模型定义保持一致的重要过程。以下是 Django 中常用的数据库迁移命令: 1. python manage.py makemigrations 功能:此命令用于根据 Django 项目的模型文件(models.pyÿ…...
LLM之循环神经网络(RNN)
在人工智能的领域中,神经网络是推动技术发展的核心力量。今天,让我们深入探讨循环神经网络(RNN) 一、神经网络基础 (1)什么是神经网络 神经网络,又称人工神经网络,其设计灵感源于人…...
TDengine 客户端连接工具 taos-Cli
简介工具获取运行命令行参数 基础参数高级参数 数据导出/导入 数据导出数据导入 执行 SQL 脚本使用小技巧 TAB 键自动补全设置字符列显示宽度其它 错误代码表 简介 TDengine 命令行工具(以下简称 TDengine CLI)是用户操作 TDengine 实例并与之交互最简…...
Express 路由路径正则详解
在 Express 中,使用正则表达式可以定义更加灵活和复杂的路由。 1. 基本语法 在 Express 中,路由路径可以是一个字符串、字符串模式或者正则表达式。当使用正则表达式时,将其作为路由路径传入 app.METHOD() 方法(METHOD 可以是 g…...
快速设置 Docker 网络代理配置
Docker Client - 代理访问远程的 Docker Daemon 在 Client 端设置代理其实就是设置 Linux 系统的代理,从而让系统的命令行可以通过代理连接到外部的网络。一般只需要配置 HTTP_PROXY 与 HTTPS_PROXY 这两个即可。 临时生效: 在命令行中执行下面的命令&…...
JVM ②-双亲委派模型 || 垃圾回收GC
这里是Themberfue 在上节课对内存区域划分以及类加载的过程有了简单的了解后,我们再了解其他两个较为重要的机制,这些都是面试中常考的知识点,有必要的话建议背出来,当然不是死记硬背,而是要有理解的背~~~如果对 JVM …...
内容中台驱动企业数字化内容管理高效协同架构
内容概要 在数字化转型加速的背景下,企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构,通过统一的内容资源池与智能化管理工具,重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒,…...
人工智障的软件开发-自动流水线CI/CD篇-docker+jenkins部署之道
指令接收:「需要自动构建系统」 系统检测:目标开发一个软件已完成代码仓库-轻盈的gitea,开始添加自动流水线 启动应急冷却协议:准备承受Java系应用的资源冲击 核心组件锁定:构建老将军Jenkins(虽然年迈但依…...
数字人技术之LatentSync Win11本地部署
#LatentSync技术原理 字节跳动开源的基于音频条件潜在扩散模型的端到端唇同步框架,基于潜在扩散模型,以音频条件潜在扩散模型为基础,利用 Stable Diffusion 强大能力,直接建模复杂的音频与视觉之间的关系,实现高质量的唇形同步. 从而制作虚拟…...
Llama3.0论文学习笔记: The Llama 3 Herd of Models
1. 写在前面 今天分享Llama3.0的论文,2024.7月来自Meta的Llama团队,2025年1月DeepSeek R1出现之后,其风头显然已经盖住了Llama3,这时候整理Llama3感觉有点赶不上潮流了,但是我还是想整理下Llama3.0,原因是…...
C#学习之数据转换
目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...
POI 和 EasyExcel
前言 将表格信息导出为Excel表格(导出数)将Excel表格信息录入到数据库(导入数据) 操作Excel目前比较流行的就是 Apache POI 和阿里巴巴的 EasyExcel Apache POI Apache POI 官网:https://poi.apache.org/ HSSF&am…...
分布式光纤传感:为生活编织“感知密网”
分布式光纤测温技术虽以工业场景为核心,但其衍生的安全效益已逐步渗透至日常生活。 分布式光纤测温技术(DTS)作为一种先进的线型温度监测手段,近年来在多个领域展现了其独特的优势。虽然其核心应用场景主要集中在工业、能源和基础…...
Web后端 - Maven管理工具
一 Maven简单介绍 Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 Maven的作用 二 Maven 安装配置 依赖配置 依赖传递 依赖范围 生命周期 注意事项:在同一套生命周期中,当运行后面的阶段时,前面的阶段都…...
聊一聊vue如何实现角色权限的控制的
大家好,我是G探险者。 关于角色与权限控制,通常是分为两大类:一种是菜单权限;一种是操作权限。 菜单权限是指,每个角色对应着可以看到哪些菜单,至于每个菜单里面的每个按钮,比如增删改查等等这类…...
Java中使用EasyExcel
Java中使用EasyExcel 文章目录 Java中使用EasyExcel一:EasyExcel介绍1.1、核心函数导入数据导出数据 1.2、项目实际应用导入数据导出数据 1.3、相关注解ExcelProperty作用示例 二:EasyExcel使用2.1、导入功能2.2、导出功能 三:EasyExcel完整代…...
LLM:GPT 系列
阅读原文: LLM:Qwen 系列 GPT(Generative Pre-trained Transformer)是生成式预训练语言模型,基于 Transformer 架构,专注于通过自回归的方式生成自然语言文本,即给定一个输入序列 x { x 1 , …...
【已解决】TypeError: AsyncConnectionPool.__init__(), new install bug, httpx==0.24.1
1,参考社区链接,首先降低gradio版本,降低到4以下,但是也不能降太低,也不能太高,要适中,推荐版本3.39.0 pip install gradio3.39.0 2,下载正确的httpx版本 参考社区链接࿰…...
Linux:深入了解进程信号(上)
目录 1. 什么是信号 1.1 引入 1.2 概念 1.3 特性 1.4 信号的三个方面 2. 信号的产生 2.1 键盘按键产生 2.2 signal捕捉信号函数 2.3 发送信号原理 2.4 硬件中断 2.5 指令和函数接口 2.5.1 kill指令 2.5.2 kill函数 2.5.3 raise与abort函数 2.6 软件条件 2.7 异…...
Java小白入门基础知识(二)
1.标识符 概念: 在程序中给类,方法,变量取的名称叫做标识符 规范: 字母,数字,下划线,$符号 注意: 不能以数字开头,也不能是关键字,严格区分大小写(一般定义常量就是大写) 软性建议: 1)类名:每个单词首字母大写(大驼峰) 2)方法名:首字母小写,后面每个单词首字母大写(小驼…...
Servlet中,WebServlet注解的使用方法
案例:声明abc接口,在接口内部获取配置信息 WebServlet(urlPatterns"/abc",loadOnStartup6,initParams {WebInitParam(name"username", value"mmm", description"this is username"),WebInitParam(name"a…...
重新出发的LLM本地部署——DeepSeek加持下的Ollama+OpenWebUI快速部署
DeepSeek 这真的是太惊艳了,发布出来的模型这么能打,在线的版本使用起来也是丝滑连招,感觉效果比起之前一直用智谱 chatglm4 更好用,想着本地化部署一下。 本来以为,会和之前在开发测试 transformers 的模型和代码一样…...
【Python爬虫(1)】专栏开篇:夯实Python基础
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
低代码组态软件-BY组态
引言 在工业4.0与智能制造浪潮的推动下,组态软件作为工业自动化的核心工具,正逐步从传统单机模式向Web化、智能化方向演进。BY组态作为一款基于Web的嵌入式组态插件工具,凭借其低代码、高灵活性和跨平台特性,成为工业物联网&#…...