目录
数据分析
一.Matplotlib
1.Matplotlib介绍
名词解释:
mat - matrix 矩阵
plot - 画图
lib - library 库matplotlib-----------------主要用于画二维图表的python工具库
Matplotlib 是一个用于创建数据可视化和图表的 Python 库.它是一个非常强大且广泛使用的工具,用于在科学、工程、数据分析和机器学习等领域中可视化数据。Matplotlib 提供了丰富的绘图功能,允许用户创建各种类型的图表,包括线图、散点图、柱状图、饼图、热力图等等
补充:
Matplotlib 是专门用于开发 2D 图表(包括 3D 图表)的 python 库大多数 Matplotlib 实用程序都位于
pyplot
子模块下,并且通常在别名下导入plt
:import matplotlib.pyplot as plt
对应的 JS 库有 D3 echarts
官网:Matplotlib
2.Matplotlib的三层结构
-
容器层
-
画板层 Canvas
Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。
-
画布层 Figure
plt.figure
,在绘图的过程中充当画布的角色 -
绘图区/坐标系axes
- 一个绘图区由横纵坐标构成,所以也叫坐标系.
- 默认会创建一个绘图区.可以显示调用
plt.subplots
创建多个绘图区(子图),一个画布可以有多个绘图层
-
-
图像层
图像层指在Axes(绘图区)内通过plot(折线图)、scatter(散点图)、bar(柱状图)、histogram(直方图)、pie(饼图)等函数根据数据绘制出的图像
-
辅助显示层
辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。
该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。
总结
Canvas(画板)位于最底层,用户一般接触不到
Figure(画布)建立在Canvas之上
Axes(绘图区)建立在Figure之上
坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上
3.Matplotlib绘图基础
3.1绘图示例
示例
import matplotlib.pyplot as plt
# 1.准备数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 2.创建一个新的图布 ----------------------------------------------------------------容器层
plt.figure()
# 绘制折线图 ----------------------------------------------------------------图像层
plt.plot(x, y, marker='o', linestyle='-', color='b', label='折线图')
# 3.添加标题和标签 ----------------------------------------------------------------辅助显示层
plt.title('标准折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 添加网格线 ----------------------------------------------------------------辅助显示层
plt.grid(True)
# 添加图例 ----------------------------------------------------------------辅助显示层
plt.legend()
# 4.显示图表
plt.show()
效果
3.2绘图流程
- 第一部分:通常是用于创建画布,以及设计好是否需要创建子图;
- 第二部分:针对每个子图,或者当前画布图像涉及画布内容(第二部分内容决定了你图像的美观程度);
- 第三部分:就是关于图像的保存以及图像的显示, 一般保存在前然后才进行显示;
其核心步骤基本就三大步:
- 创建画布与子图
- **定义坐标轴 **(杂七杂八的设置项)
- 保存或生成生成图片
3.3图形参数解析
一个标准的Matplotlib图表通常由以下几个组成元素构成:
容器层
- 图形(Figure):图形(画布)是整个图表的最外层容器,可以包含一个或多个坐标图形(axes)。你可以使用
plt.figure()
函数创建新的图形。- 坐标图形 (Axes):坐标图形是图表中的一个小区域,用于绘制数据。通常一个图形中包含一个或多个坐标图形,你可以使用
plt.subplot()
或plt.subplots()
来创建它们。图像层
Axes(绘图区)内通过plot(折线图)、scatter(散点图)、bar(柱状图)、histogram(直方图)、pie(饼图)等函数根据数据绘制出的图像
**坐标轴 **:每个子图都包含坐标轴,坐标轴用于表示数据的范围和刻度。你可以在坐标轴上绘制数据点、线条、文本等。Matplotlib提供了
ax.plot()
、ax.scatter()
等函数来在坐标轴上绘制图形。辅助显示层
- 图例 (Legend):图例用于解释图表中不同数据系列的含义。你可以使用
ax.legend()
来创建图例,通常在坐标图形中设置。- 主要刻度 (Major Tick):主要刻度是坐标轴上的大刻度,用于表示主要的数据点位置。你可以使用
ax.set_xticks()
和ax.set_yticks()
来自定义主要刻度。- 次要刻度 (Minor Tick):次要刻度是坐标轴上的小刻度,通常位于主要刻度之间,用于更精细地标记坐标轴。你可以使用
ax.minorticks_on()
启用次要刻度。- 主要刻度标签 (Major Tick Label):主要刻度标签是与主要刻度关联的数值标签。Matplotlib通常会自动生成它们,但你可以使用
ax.set_xticklabels()
和ax.set_yticklabels()
来自定义主要刻度标签。- 次要刻度标签 (Minor Tick Label):次要刻度标签是与次要刻度关联的数值标签。你可以使用
ax.set_xticklabels()
和ax.set_yticklabels()
来自定义次要刻度标签。- Y轴名称 (Y Axis Label):Y轴名称用于描述Y轴所代表的数据。你可以使用
ax.set_ylabel()
来设置Y轴名称。- X轴名称 (X Axis Label):X轴名称用于描述X轴所代表的数据。你可以使用
ax.set_xlabel()
来设置X轴名称。- 标题 (Title):标题是图表的名称,通常位于图表的顶部。你可以使用
ax.set_title()
来设置子图的标题,或者使用plt.title()
设置整个图表的标题。- 数据标记 (Markers):数据标记是用于标识散点图中的数据点的符号或标记。你可以在绘制散点图时使用
marker
参数来指定数据标记的类型。- 网格线 (Grid):网格线是绘制在坐标图形上的水平和垂直线,用于帮助读者对数据的位置有更清晰的认识。你可以使用
ax.grid()
来添加或删除网格线。- 背景 (Background):图表的背景可以是白色、灰色或其他颜色,也可以是带有网格线的背景。你可以使用
ax.set_facecolor()
来更改坐标轴的背景颜色。- 注释 (Annotations):注释是在图表上添加文本或箭头以解释数据点或图形的附加信息。你可以使用
ax.annotate()
来添加注释。- 颜色、线型和标记 (Colors, Line Styles, and Markers):你可以使用不同的颜色、线型和标记来自定义绘制的线条或数据点的外观。这些属性可以通过相应的参数来设置,如
color
、linestyle
和marker
。
这些是Matplotlib图表的主要组成元素,你可以根据需要定制和控制每个元素的外观和行为,以创建符合你需求的数据可视化图表。
3.4绘图线
在Matplotlib中,你可以通过不同的参数来自定义绘图线的类型(线型)、颜色和大小。这些参数通常是在绘制图形时的函数中指定的
a.线的类型
线的类型可以使用 linestyle 参数来定义,简写为 ls。
类型 | 简写 | 说明 |
---|---|---|
‘solid’ (默认) | ‘-’ | 实线 |
‘dotted’ | ‘:’ | 点虚线 |
‘dashed’ | ‘–’ | 破折线 |
‘dashdot’ | ‘-.’ | 点划线 |
‘None’ | ‘’ 或 ’ ’ | 不画线 |
b.颜色(Color)
线的颜色可以使用 color 参数来定义,在Matplotlib中使用颜色字符串,颜色名称,RGB元组来指定线的颜色
颜色字符串 | 颜色描述 |
---|---|
'b' | 蓝色 |
'g' | 绿色 |
'r' | 红色 |
'c' | 青色 |
'm' | 品红 |
'y' | 黄色 |
'k' | 黑色 |
颜色名称 | 颜色描述 |
---|---|
'blue' | 蓝色 |
'green' | 绿色 |
'red' | 红色 |
'cyan' | 青色 |
'magenta' | 品红 |
'yellow' | 黄色 |
'black' | 黑色 |
RGB元组 | 颜色描述 |
---|---|
(0.2, 0.4, 0.6) | 自定义颜色 |
(1, 0.5, 0.2) | 自定义颜色 |
(0.8, 0.2, 0.3) | 自定义颜色 |
c.线的大小
线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:1、2.0、5.67 等。
示例
import matplotlib.pyplot as plt # 创建数据 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # 绘制不同线型、颜色和大小的线 plt.plot(x, y, linestyle='--', color='red', linewidth=2, label='Line 1') plt.plot(x, [i**2 for i in y], linestyle=':', color='blue', lw=1.5, label='Line 2') plt.plot(x, [i**1.5 for i in y], linestyle='-.', color='green', lw=3, label='Line 3') # 添加图例 plt.legend() # 显示图形 plt.show()
效果图
3.5绘图标记
图过程如果我们想要给坐标自定义一些不一样的标记,就可以使用 plot() 方法(or其他方法)的 marker 参数来定义
marker 可以定义的符号如下:
标记 | 符号 | 描述 |
---|---|---|
“.” | ![]() | 点 |
“,” | ![]() | 像素点 |
“o” | ![]() | 实心圆 |
“v” | ![]() | 下三角 |
“^” | ![]() | 上三角 |
“<” | ![]() | 左三角 |
“>” | ![]() | 右三角 |
“1” | ![]() | 下三叉 |
“2” | ![]() | 上三叉 |
“3” | ![]() | 左三叉 |
“4” | ![]() | 右三叉 |
“8” | ![]() | 八角形 |
“s” | ![]() | 正方形 |
“p” | ![]() | 五边形 |
“P” | ![]() | 加号(填充) |
“*” | ![]() | 星号 |
“h” | ![]() | 六边形 1 |
“H” | ![]() | 六边形 2 |
“+” | ![]() | 加号 |
“x” | ![]() | 乘号 x |
“X” | ![]() | 乘号 x (填充) |
“D” | ![]() | 菱形 |
“d” | ![]() | 瘦菱形 |
“|” | ![]() | 竖线 |
“_” | ![]() | 横线 |
0 (TICKLEFT) | ![]() | 左横线 |
1 (TICKRIGHT) | ![]() | 右横线 |
2 (TICKUP) | ![]() | 上竖线 |
3 (TICKDOWN) | ![]() | 下竖线 |
4 (CARETLEFT) | ![]() | 左箭头 |
5 (CARETRIGHT) | ![]() | 右箭头 |
6 (CARETUP) | ![]() | 上箭头 |
7 (CARETDOWN) | ![]() | 下箭头 |
8 (CARETLEFTBASE) | ![]() | 左箭头 (中间点为基准) |
9 (CARETRIGHTBASE) | ![]() | 右箭头 (中间点为基准) |
10 (CARETUPBASE) | ![]() | 上箭头 (中间点为基准) |
11 (CARETDOWNBASE) | ![]() | 下箭头 (中间点为基准) |
“None”, " " or “” | 没有任何标记 | |
‘ f f f’ | ![]() | 渲染指定的字符。例如 “ f f f” 以字母 f 为标记。 |
示例
import matplotlib.pyplot as plt # 创建示例数据 x = [1, 2, 3, 4, 5] y = [10, 5, 7, 2, 8] # 绘制散点图,使用不同的标记 plt.scatter(x, y, marker='o', label='Circle') plt.scatter(x, [i+1 for i in y], marker='s', label='Square') plt.scatter(x, [i-1 for i in y], marker='^', label='Triangle') plt.scatter(x, [i+2 for i in y], marker='*', label='Star') # 添加图例 plt.legend() # 显示图形 plt.show()
效果图
4.函数解析
常用函数(简化版)
函数 | 核心参数 | 说明功能 |
---|---|---|
figure(figsize, dpi) | figsize (图表尺寸), dpi (分辨率) | 设置图表的大小与分辨率。 |
title(v, fontdict) | v (图名), fontdict (文本格式,包括字体大小、类型) | 设置图表标题。 |
xlabel(xlabel) | xlabel (X轴名) | 设置X轴的标题。 |
ylabel(ylabel) | ylabel (Y轴名) | 设置Y轴的标题。 |
axis(xmin, xmax, ymin, ymax) | xmin , xmax , ymin , ymax (设置X轴和Y轴的范围) | 设置X轴和Y轴的范围。 |
xticks(ticks, labels, fontdict) | ticks (刻度数值), labels (刻度名称), fontdict (字体格式) | 设置X轴刻度位置、标签和字体格式。 |
yticks(ticks, labels, fontdict) | ticks (刻度数值), labels (刻度名称), fontdict (字体格式) | 设置Y轴刻度位置、标签和字体格式。 |
grid(b, which, axis, color, linestyle, linewidth, alpha) | b (有无网格线), which (主/次网格线), axis (X轴和Y轴网格线), color (颜色), linestyle (线型), linewidth (线宽), alpha (透明度) | 设置网格线的属性,包括显示与否、类型、颜色、线型等。 |
4.1容器层
4.1.1画布层
**plt.figure() **
figure()
函数用于创建一个新的图形,您可以通过参数调整图形的尺寸、分辨率、背景颜色等属性。可以使用它来创建单独的图形,或者在多个图形之间切换。如果不指定参数,将使用默认值。1.函数签名
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, clear=False, **kwargs)
2.常用参数解析
num
(int or str, 可选): 图形的标识号,可以是整数或字符串。如果未指定,将自动生成一个唯一的标识号。figsize
(tuple, 可选): 图形的尺寸,以英寸为单位,通常以一个包含两个浮点数的元组表示 (width, height)。默认为None
,表示使用默认尺寸。dpi
(int, 可选): 图形的分辨率(每英寸像素数)。默认为None
,表示使用默认分辨率。facecolor
(color, 可选): 图形的背景颜色。可以是颜色名称字符串或RGBA元组。默认为白色。edgecolor
(color, 可选): 图形的边框颜色。可以是颜色名称字符串或RGBA元组。默认为白色。frameon
(bool, 可选): 控制图形是否有边框。如果设置为False
,图形将没有边框。默认为True
。clear
(bool, 可选): 如果为True
,则在创建新图形之前清除当前图形。默认为False
。**kwargs
: 其他关键字参数,通常用于传递给具体图形的构造函数。3.用法示例
import matplotlib.pyplot as plt # 创建一个新的图形,默认尺寸和分辨率 plt.figure() # 创建一个新的图形,指定尺寸和分辨率 plt.figure(figsize=(6, 4), dpi=100) # 创建一个带有背景颜色的图形 plt.figure(facecolor='lightgray') # 创建一个没有边框的图形 plt.figure(frameon=False) # 清除当前图形并创建一个新的图形 plt.figure(clear=True) # 使用标识号创建一个特定的图形 plt.figure(num=1) # 使用kwargs传递额外参数 plt.figure(figsize=(8, 6), dpi=150, facecolor='lightblue')
4.2绘图区
1. plt.subplot()
subplot()
函数用于创建一个多子图布局,并选择当前子图以进行绘图。通过指定行数(nrows
)、列数(ncols
)和子图索引(index
),可以将图形分割为不同的子图。在每个子图中,您可以绘制不同的图形或数据,并对每个子图进行单独的操作。最后,使用plt.show()
显示整个图形。1.函数签名
matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)
2.常用参数解析
nrows
(int): 子图的行数。ncols
(int): 子图的列数。index
(int): 当前子图的索引,从左上角开始,从左到右、从上到下递增,从1开始计数。**kwargs
: 其他关键字参数,通常用于传递给子图的构造函数。3.用法示例
import matplotlib.pyplot as plt # 创建一个2x2的子图布局,选择第一个子图 plt.subplot(2, 2, 1) plt.plot([1, 2, 3, 4], [1, 2, 1, 3]) plt.title('Subplot 1') # 选择第二个子图 plt.subplot(2, 2, 2) plt.plot([1, 2, 3, 4], [4, 3, 2, 1]) plt.title('Subplot 2') # 选择第三个子图 plt.subplot(2, 2, 3) plt.plot([1, 2, 3, 4], [2, 3, 2, 4]) plt.title('Subplot 3') # 选择第四个子图 plt.subplot(2, 2, 4) plt.plot([1, 2, 3, 4], [3, 1, 3, 2]) plt.title('Subplot 4') # 调整子图布局之间的间距 plt.tight_layout() # 显示整个图形 plt.show()
效果图
2. plt.subplots()
subplots()
函数用于创建一个多子图布局,并返回包含子图对象的数组。通过指定行数(nrows
)和列数(ncols
),您可以创建多个子图,并通过sharex
和sharey
参数来控制是否共享X轴和Y轴刻度。您可以在每个子图中绘制不同的图形或数据,并对每个子图进行单独的操作。最后,使用plt.show()
显示整个图形。1.函数签名
matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
2.常用参数解析
nrows
(int, 可选): 子图的行数,默认为1。ncols
(int, 可选): 子图的列数,默认为1。sharex
(bool or {‘none’, ‘all’, ‘row’, ‘col’}, 可选): 控制是否共享X轴刻度。sharey
(bool or {‘none’, ‘all’, ‘row’, ‘col’}, 可选): 控制是否共享Y轴刻度。squeeze
(bool, 可选): 控制是否对子图数组进行挤压以删除空维度。subplot_kw
(dict, 可选): 传递给add_subplot()
方法的关键字参数。gridspec_kw
(dict, 可选): 传递给GridSpec
构造函数的关键字参数。**fig_kw
: 传递给figure()
函数的关键字参数。3.用法示例
import matplotlib.pyplot as plt # 创建一个2x2的子图布局,共享X轴和Y轴 fig, axs = plt.subplots(2, 2, sharex=True, sharey=True) # 在每个子图中绘制数据 axs[0, 0].plot([1, 2, 3, 4], [1, 2, 1, 3]) axs[0, 0].set_title('Subplot 1') axs[0, 1].plot([1, 2, 3, 4], [4, 3, 2, 1]) axs[0, 1].set_title('Subplot 2') axs[1, 0].plot([1, 2, 3, 4], [2, 3, 2, 4]) axs[1, 0].set_title('Subplot 3') axs[1, 1].plot([1, 2, 3, 4], [3, 1, 3, 2]) axs[1, 1].set_title('Subplot 4') # 设置整个图形的标题 fig.suptitle('Four Subplots Sharing Axes') # 调整子图布局之间的间距 plt.tight_layout() # 显示整个图形 plt.show()
效果图
注意
- 在matplotlib 中,有两种画图方式
plt.xxx
系列:
- 这是Matplotlib中的快速绘图方式,适合初学者或需要快速创建简单图形的场景。它提供了许多方便的函数,如
plt.plot()
、plt.scatter()
等,使得绘图变得容易上手。- 对于简单的图形,这种方式足够了,但当需要更高级的图形自定义和精细调整时,可能就显得不够灵活。
fig, ax = plt.subplots()
方式:
- 这是更加灵活和控制细节的方式。你可以明确地创建画布(
figure
)和子图(axes
),然后对每个子图进行单独操作。- 这种方式让你更容易理解Matplotlib的底层结构,允许你对图形的各个部分进行更细致的控制,包括坐标轴、图例、标题等。
- figure 指的是画布 v
- axes 这个画布中的一个对象,可以是一个子图
- **axis **axes 这个对象中的坐标轴
4.2图像层
1. plot()
plot()
方法用于绘制曲线图,可以用不同的参数和关键字参数来控制曲线的样式、颜色、标记、线型等。您可以绘制单条曲线或多条曲线,也可以使用DataFrame作为数据源。此外,可以通过设置scalex
和scaley
来控制X轴和Y轴的缩放。通常,还可以使用legend()
来添加图例,以便标识不同曲线的含义。这个方法是Matplotlib中用于绘制曲线图的核心函数之一。1.函数签名
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
2.常用参数解析
*args
: 用于传递数据的位置参数。可以是以下几种形式之一:
- 单个数组或序列,表示Y轴数据,X轴数据默认为该序列的索引。
- 两个数组或序列,分别表示X轴和Y轴的数据。
- 多组X轴和Y轴数据,用于绘制多条曲线。
scalex
(bool, 可选): 控制X轴数据是否进行缩放,默认为True
,表示进行缩放。scaley
(bool, 可选): 控制Y轴数据是否进行缩放,默认为True
,表示进行缩放。data
(DataFrame, 可选): 用于传递数据的DataFrame,如果指定了DataFrame,则可以使用DataFrame中的列名作为数据源。**kwargs
: 其他关键字参数,用于控制曲线的样式、颜色、标记、线型、线宽等,以及图例、标签等属性。3.用法示例
import matplotlib.pyplot as plt # 示例1: 绘制单条曲线 x = [1, 2, 3, 4] y = [1, 2, 1, 3] plt.plot(x, y, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8) # 示例2: 绘制多条曲线 x = [1, 2, 3, 4] y1 = [1, 2, 1, 3] y2 = [3, 2, 4, 1] plt.plot(x, y1, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8) plt.plot(x, y2, label='Line 2', color='green', linestyle='--', marker='s', markersize=8) # 示例3: 使用DataFrame作为数据源 import pandas as pd data = pd.DataFrame({'X': x, 'Y': y}) plt.plot('X', 'Y', data=data, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8) # 示例4: 隐藏X轴和Y轴的缩放 plt.plot(x, y, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8, scalex=False, scaley=False) # 示例5: 添加图例 plt.plot(x, y1, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8) plt.plot(x, y2, label='Line 2', color='green', linestyle='--', marker='s', markersize=8) plt.legend(loc='upper right') # 显示图表 plt.show()
效果图
2. scateer()
scatter()
方法用于绘制散点图,它可以根据数据点的位置、大小、颜色、标记样式等属性来表示数据分布。您可以通过传递不同的参数来自定义数据点的外观,例如大小、颜色、透明度等。通常,散点图用于显示两个数值变量之间的关系,或者用于显示多维数据的分布情况。这个方法是Matplotlib中用于绘制散点图的重要函数。1.函数签名
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
2.常用参数解析
x
(array-like): X轴的数据点的位置。y
(array-like): Y轴的数据点的位置。s
(float or array-like, 可选): 数据点的大小。可以是一个标量,表示所有点的相同大小,或者是一个与x和y具有相同长度的数组,用于指定每个点的大小。c
(color, sequence, or sequence of color, 可选): 数据点的颜色。可以是一个颜色名称、一个颜色序列,或一个与x和y具有相同长度的数组,用于指定每个点的颜色。marker
(str, 可选): 数据点的标记样式,例如圆圈、正方形、星号等。cmap
(Colormap, 可选): 用于映射颜色的颜色映射对象。通常与c
参数一起使用,用于根据数值数据生成颜色。norm
(Normalize, 可选): 用于归一化颜色映射的归一化对象。vmin
,vmax
(float, 可选): 用于设置颜色映射的数据值范围,用于归一化颜色映射。alpha
(float, 可选): 数据点的透明度,取值范围为0(完全透明)到1(不透明)。linewidths
(float, 可选): 数据点的边框线宽度。edgecolors
(color or sequence of color, 可选): 数据点的边框颜色。**kwargs
: 其他关键字参数,用于控制数据点的属性,例如标签、颜色映射、图例等。3.用法示例
import matplotlib.pyplot as plt # 示例1: 绘制散点图,指定数据点大小和颜色 x = [1, 2, 3, 4, 5] y = [2, 3, 1, 4, 2] plt.scatter(x, y, s=100, c='red', marker='o', label='Data Points') # 示例2: 使用数组指定数据点的大小和颜色 sizes = [20, 40, 60, 80, 100] colors = ['red', 'green', 'blue', 'orange', 'purple'] plt.scatter(x, y, s=sizes, c=colors, marker='s', label='Data Points') # 示例3: 使用颜色映射绘制数据点 import numpy as np size = np.random.randint(10, 100, size=50) temperature = np.random.rand(50) plt.scatter(x, y, s=size, c=temperature, cmap='coolwarm', edgecolors='black') plt.colorbar(label='Temperature') # 示例4: 自定义其他属性 plt.scatter(x, y, s=80, c='blue', marker='^', alpha=0.7, linewidths=2, edgecolors='black', label='Data Points') # 添加图例 plt.legend() # 显示图表 plt.show()
效果图
3. bar()
bar()
方法用于绘制条形图,通常用于显示不同类别或数据点的数值大小。您可以通过传递不同的参数来自定义条形图的外观,包括颜色、宽度、对齐方式等。条形图常用于比较不同类别的数据,并可以堆叠多个数据系列以显示总和。这个方法是Matplotlib中用于绘制条形图的核心函数之一。1.函数签名
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, align='center', data=None, **kwargs)
2.常用参数解析
x
(array-like): 条形图的X轴位置,通常是一个包含类别或数据标签的数组或序列。height
(array-like): 条形图的高度,表示每个条形的数值。width
(float, 可选): 条形的宽度,默认为0.8,可以根据需要进行调整。bottom
(array-like, 可选): 条形的底部位置,用于绘制堆叠条形图。align
(str, 可选): 条形的对齐方式,可以选择以下值之一:
'center'
(默认值): 条形在X轴位置上居中对齐。'edge'
: 条形在X轴位置上左对齐。data
(DataFrame, 可选): 用于传递数据的DataFrame,可以使用DataFrame的列名作为参数。**kwargs
: 其他关键字参数,用于控制条形图的样式、颜色、标签等属性。常见的关键字参数包括:
color
(color, 可选): 条形的颜色。edgecolor
(color, 可选): 条形的边框颜色。label
(str, 可选): 条形的标签,用于添加图例。alpha
(float, 可选): 条形的透明度。yerr
(float or array-like, 可选): 条形的误差线。capsize
(float, 可选): 误差线顶部和底部的帽子大小。3.用法示例
import matplotlib.pyplot as plt # 示例1: 绘制简单的条形图 categories = ['A', 'B', 'C', 'D'] values = [3, 7, 2, 5] plt.bar(categories, values, color='blue', label='Data') # 示例2: 绘制堆叠条形图 categories = ['A', 'B', 'C', 'D'] values1 = [3, 7, 2, 5] values2 = [2, 5, 3, 8] plt.bar(categories, values1, color='blue', label='Data 1') plt.bar(categories, values2, color='red', label='Data 2', bottom=values1) # 示例3: 自定义其他属性 categories = ['A', 'B', 'C', 'D'] values = [3, 7, 2, 5] plt.bar(categories, values, width=0.6, color='green', edgecolor='black', alpha=0.7, label='Data') # 示例4: 使用DataFrame作为数据源 import pandas as pd data = pd.DataFrame({'Category': categories, 'Value': values}) plt.bar('Category', 'Value', data=data, color='purple', label='Data') # 添加图例 plt.legend() # 显示图表 plt.show()
效果图
4. hist()
hist()
方法用于绘制直方图,通常用于可视化数据的分布情况。您可以通过传递不同的参数来自定义直方图的外观,包括箱子数量、颜色、累积直方图、堆叠直方图、对数刻度等。直方图常用于观察数据的分布特征,例如数据的中心趋势、离散程度等。这个方法是Matplotlib中用于绘制直方图的核心函数之一。1.函数签名
matplotlib.pyplot.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)
2.常用参数解析
x
(array-like): 数据集,即要绘制直方图的数据。bins
(int, sequence, or str, 可选): 控制直方图的箱子(柱子)数量或边界。可以是一个整数,表示箱子的数量;一个序列,表示箱子的边界;或一个字符串,用于指定自动选择箱子数量的算法。range
(tuple, 可选): 指定直方图的值范围,以元组(min, max)
的形式指定。只绘制在该范围内的数据点。density
(bool, 可选): 如果为True
,则返回归一化的频数(概率密度),而不是计数。默认为False
。weights
(array-like, 可选): 指定每个数据点的权重,用于计算直方图。cumulative
(bool, 可选): 如果为True
,则绘制累积直方图。默认为False
。bottom
(scalar, 可选): 用于绘制堆叠直方图时的底部位置。histtype
(str, 可选): 指定直方图的类型,可以选择以下值之一:
'bar'
(默认值): 绘制常规直方图。'barstacked'
: 绘制堆叠直方图。'step'
: 绘制阶梯直方图。'stepfilled'
: 绘制填充的阶梯直方图。align
(str, 可选): 控制箱子的对齐方式,可以选择以下值之一:
'left'
: 左对齐箱子。'mid'
(默认值): 箱子在中间对齐。'right'
: 右对齐箱子。orientation
(str, 可选): 控制直方图的方向,可以选择以下值之一:
'vertical'
(默认值): 绘制垂直直方图。'horizontal'
: 绘制水平直方图。rwidth
(float or None, 可选): 控制箱子的宽度,通常在绘制阶梯直方图时使用。log
(bool, 可选): 如果为True
,则使用对数刻度绘制直方图。默认为False
。color
(color or array-like, 可选): 指定直方图的颜色。label
(str, 可选): 指定直方图的标签,用于添加图例。stacked
(bool, 可选): 如果为True
,则绘制堆叠直方图。默认为False
。data
(DataFrame, 可选): 用于传递数据的DataFrame,可以使用DataFrame的列名作为参数。**kwargs
: 其他关键字参数,用于控制直方图的样式、颜色、标签等属性。3.用法示例
import matplotlib.pyplot as plt import numpy as np # 示例1: 绘制简单的直方图 data = np.random.randn(1000) # 生成随机数据 plt.hist(data, bins=20, color='blue', edgecolor='black', alpha=0.7, label='Data') # 示例2: 绘制累积直方图 data = np.random.randn(1000) # 生成随机数据 plt.hist(data, bins=20, color='green', edgecolor='black', alpha=0.7, label='Data', cumulative=True) # 示例3: 绘制堆叠直方图 data1 = np.random.randn(1000) # 第一组随机数据 data2 = np.random.randn(1000) # 第二组随机数据 plt.hist([data1, data2], bins=20, color=['red', 'blue'], edgecolor='black', alpha=0.7, label=['Data 1', 'Data 2'], stacked=True) # 示例4: 自定义其他属性 data = np.random.randn(1000) # 生成随机数据 plt.hist(data, bins=20, color='purple', edgecolor='black', alpha=0.7, label='Data', density=True) # 添加图例 plt.legend() # 显示图表 plt.show()
效果图
5. pie()
pie()
方法用于绘制饼图,它通常用于可视化数据的组成部分占比。您可以通过传递不同的参数来自定义饼图的外观,包括扇形区域的大小、颜色、标1.函数签名
matplotlib.pyplot.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=False, data=None)
2.常用参数解析
x
(array-like): 表示扇形区域的大小,通常为一组非负数。explode
(array-like, 可选): 控制饼图的扇形区域是否偏移,用于强调某些部分。默认为None
,表示不偏移。labels
(list-like, 可选): 指定每个扇形区域的标签文本。如果不指定,将不显示标签。colors
(list-like, 可选): 指定每个扇形区域的颜色。如果不指定,将使用默认颜色。autopct
(str or callable, 可选): 控制扇形区域上显示的百分比值。可以是字符串格式,也可以是一个可调用函数,用于自定义百分比值的显示。pctdistance
(float, 可选): 百分比值标签距离扇形区域中心的距离,以分数半径为单位,默认为0.6。shadow
(bool, 可选): 控制是否添加阴影效果,默认为False
。labeldistance
(float, 可选): 扇形区域标签文本距离扇形区域中心的距离,以分数半径为单位,默认为1.1。startangle
(float, 可选): 饼图的起始角度,以度为单位,默认为0度(从正X轴开始)。radius
(float, 可选): 饼图的半径,默认为1。counterclock
(bool, 可选): 控制饼图的绘制方向,如果为True
,则逆时针绘制;如果为False
,则顺时针绘制。默认为True
。wedgeprops
(dict, 可选): 扇形区域的属性,例如边框线样式、边框线宽度等。textprops
(dict, 可选): 标签文本的属性,例如字体大小、颜色等。center
(tuple, 可选): 饼图的中心位置,以坐标(x, y)
表示,默认为(0, 0)
。frame
(bool, 可选): 控制是否绘制饼图的圆形边框。默认为False
。rotatelabels
(bool, 可选): 控制是否旋转标签文本,以避免重叠。默认为False
。normalize
(bool, 可选): 如果为True
,则将输入的数据x
规范化为百分比。默认为False
,表示直接使用输入数据。data
(DataFrame, 可选): 用于传递数据的DataFrame,可以使用DataFrame的列名作为参数。用法示例
import matplotlib.pyplot as plt # 示例1: 绘制简单的饼图 sizes = [30, 20, 15, 35] # 扇形区域的大小 labels = ['A', 'B', 'C', 'D'] # 扇形区域的标签 colors = ['red', 'green', 'blue', 'orange'] # 扇形区域的颜色 plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90) # 示例2: 自定义其他属性 sizes = [30, 20, 15, 35] labels = ['A', 'B', 'C', 'D'] colors = ['red', 'green', 'blue', 'orange'] explode = (0.1, 0, 0, 0) # 偏移第一个扇形区域 plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90, explode=explode) # 示例3: 使用DataFrame作为数据源 import pandas as pd data = pd.DataFrame({'Sizes': sizes, 'Labels': labels}) plt.pie('Sizes', labels='Labels', data=data, autopct='%1.1f%%', startangle=90) # 示例4: 饼图内外部的控制 sizes = [30, 20, 15, 35] labels = ['A', 'B', 'C', 'D'] plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, radius=0.8, pctdistance=0.85, labeldistance=1.2) # 示例5: 绘制堆叠饼图 sizes1 = [15, 20, 25] sizes2 = [10, 15, 20] plt.pie(sizes1, labels=labels[:3], autopct='%1.1f%%', startangle=90, radius=0.6) plt.pie(sizes2, labels=labels[3:], autopct='%1.1f%%', startangle=90, radius=0.4) # 显示图表 plt.show()
效果图
4.3辅助显示层
1. title() (标题)
title()
方法用于设置图表的标题文本。您可以指定标题文本、自定义标题文本的样式、位置和与图表的距离。通常,您可以通过label
参数来设置标题文本,通过fontdict
参数来自定义标题文本的格式,通过loc
参数来指定标题位置,通过pad
参数来调整标题与图表的距离,还可以使用额外的关键字参数来进一步自定义标题样式。最后,使用plt.show()
来显示图表。1.函数签名
pythonCopy code matplotlib.pyplot.title(label, fontdict=None, loc=None, pad=None, **kwargs)
2.常用参数解析
label
(str): 指定图表的标题文本。fontdict
(dict, 可选): 用于指定标题文本的格式,包括字体大小、颜色、类型等。它是一个包含文本属性的字典。loc
(str, 可选): 指定标题的位置,常用的位置包括'center'
、'left'
、'right'
等,默认是'center'
。pad
(float, 可选): 指定标题与图表的距离,以点为单位。正值将标题向上移动,负值将其向下移动。**kwargs
: 其他关键字参数,通常用于传递给标题文本的额外参数。3.用法示例
import matplotlib.pyplot as plt # 创建一个简单的图表 plt.plot([1, 2, 3, 4], [1, 2, 1, 3]) # 设置图表的标题 plt.title('Simple Plot') # 使用fontdict自定义标题文本的样式 title_style = {'fontsize': 16, 'color': 'blue', 'fontweight': 'bold'} plt.title('Customized Title', fontdict=title_style) # 移动标题位置并设置距离 plt.title('Title with Custom Position', loc='left', pad=20) # 使用额外的关键字参数设置标题样式 plt.title('Title with Extra Parameters', fontsize=14, color='green') # 显示图表 plt.show()
效果图
2. xlabel()和ylabel()方法 (轴标签)
在pyplot 模块中可以使用xlabel() 和ylabel() 函数设置x 轴y 轴的标签。这两个函数的使用方法非常相似,以xlabel()方法为例
xlabel()
和ylabel()
方法用于设置X轴和Y轴的标题文本。您可以指定标题文本、自定义标题文本的样式、位置和与刻度标签的距离。通常,您可以通过参数来设置标题文本,通过fontdict
参数来自定义标题文本的格式,通过labelpad
参数来调整标题与刻度标签的距离,还可以使用额外的关键字参数来进一步自定义标题样式。最后,使用plt.show()
来显示图表。1.函数签名
matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
2.常用参数解析
xlabel
(str): 指定X轴的标题文本。fontdict
(dict, 可选): 用于指定标题文本的格式,包括字体大小、颜色、类型等。它是一个包含文本属性的字典。labelpad
(float, 可选): 指定X轴标题与X轴刻度标签之间的距离,以点为单位。**kwargs
: 其他关键字参数,通常用于传递给X轴标题文本的额外参数。3.用法示例
import matplotlib.pyplot as plt # 创建一个简单的图表 plt.plot([1, 2, 3, 4], [1, 2, 1, 3]) # 设置X轴的标题 plt.xlabel('X Axis') # 使用fontdict自定义X轴标题的样式 xlabel_style = {'fontsize': 14, 'color': 'blue', 'fontweight': 'bold'} plt.xlabel('Customized X Label', fontdict=xlabel_style) # 调整X轴标题与X轴刻度的距离 plt.xlabel('X Label with Custom Labelpad', labelpad=10) # 使用额外的关键字参数设置X轴标题样式 plt.xlabel('X Label with Extra Parameters', fontsize=12, color='green') # 显示图表 plt.show()
效果图
3. xlim()和ylim()方法 (限制范围)
xlim 和ylim 很类似,以xlim()为例
xlim()
和ylim()
函数是Matplotlib库中用于设置X轴和Y轴的限制范围的函数。它们分别用于控制X轴和Y轴的可视范围,从而允许您放大或缩小数据的显示区域。1.函数签名
matplotlib.pyplot.xlim(left=None, right=None, emit=True, auto=False, xmin=None, xmax=None)
2.常用参数解析
left
(float, 可选): 指定X轴的左边界,即可视范围的最小X值。right
(float, 可选): 指定X轴的右边界,即可视范围的最大X值。emit
(bool, 可选): 控制是否触发'xlim_changed'
事件,默认为True
,表示触发事件。auto
(bool, 可选): 控制是否自动计算限制范围,默认为False
,表示手动指定范围。xmin
(float, 可选):left
参数的别名,用于指定X轴的左边界。xmax
(float, 可选):right
参数的别名,用于指定X轴的右边界。3.用法示例
import matplotlib.pyplot as plt # 创建一个简单的图表 x = [1, 2, 3, 4] y = [1, 2, 1, 3] plt.plot(x, y) # 设置X轴范围 plt.xlim(0, 5) # 设置X轴范围并禁用事件触发 plt.xlim(1, 3, emit=False) # 自动计算X轴范围 plt.xlim(auto=True) # 使用xmin和xmax指定X轴范围的别名 plt.xlim(xmin=1, xmax=3) # 显示图表 plt.show()
效果图
**补充: **
autoscale()
函数用于自动调整图表的坐标轴范围,以便所有数据都能够完全可视化。您可以选择性地指定要自动缩放的坐标轴,也可以启用或禁用自动缩放。如果需要,还可以使用tight
参数将坐标轴范围限制在数据的最小和最大值附近。这个函数在处理不同数据范围的情况下非常有用,可以确保数据始终以最佳方式显示在图表中。1.函数签名
matplotlib.pyplot.autoscale(enable=True, axis='both', tight=None)
2.常用参数解析
enable
(bool, 可选): 控制是否启用自动缩放。如果设置为True
(默认值),则启用自动缩放;如果设置为False
,则禁用自动缩放。axis
(str, 可选): 指定要自动缩放的坐标轴。可以选择以下值之一:
'both'
(默认值): 自动缩放X轴和Y轴。'x'
: 仅自动缩放X轴。'y'
: 仅自动缩放Y轴。tight
(bool, 可选): 如果设置为True
,则会将坐标轴范围设置为“紧凑”,即限制在数据的最小和最大值附近。默认值为None
,表示不应用“紧凑”设置。3.用法示例
import matplotlib.pyplot as plt # 创建一个简单的图表 x = [1, 2, 3, 4] y = [1, 2, 1, 3] plt.plot(x, y) # 自动缩放X轴和Y轴 plt.autoscale() # 仅自动缩放X轴 plt.autoscale(axis='x') # 仅自动缩放Y轴 plt.autoscale(axis='y') # 自动缩放并应用"紧凑"设置 plt.autoscale(tight=True) # 禁用自动缩放 plt.autoscale(enable=False) # 显示图表 plt.show()
4. xticks()和yticks()方法 (自定义轴要显示的刻度位置和刻度标签)
xticks()和yticks()相似,以xticks为例
xticks()
函数用于自定义X轴的刻度位置和标签。您可以指定要显示的刻度位置和标签,也可以使用额外的关键字参数来设置刻度文本的样式。如果需要,您还可以隐藏X轴刻度,或者自定义刻度标签的显示方式,例如使用自定义的格式函数来生成标签。这个函数允许您更灵活地控制X轴刻度的外观和位置。1.函数签名
matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)
2.常用参数解析
ticks
(array-like, 可选): 指定X轴刻度位置的序列。它可以是一个数组、列表或其他可迭代对象,用于定义X轴的刻度位置。labels
(array-like, 可选): 指定X轴刻度标签的序列。它可以是一个数组、列表或其他可迭代对象,用于定义X轴的刻度标签。**kwargs
: 其他关键字参数,通常用于传递给刻度文本的额外参数,例如字体样式、颜色等。3.用法示例
import matplotlib.pyplot as plt # 创建一个简单的图表 x = [1, 2, 3, 4] y = [1, 2, 1, 3] plt.plot(x, y) # 自定义X轴刻度位置和标签 custom_ticks = [1, 2, 3, 4] custom_labels = ['One', 'Two', 'Three', 'Four'] plt.xticks(ticks=custom_ticks, labels=custom_labels) # 使用额外的关键字参数设置刻度文本的样式 plt.xticks(ticks=custom_ticks, labels=custom_labels, fontsize=12, color='blue') # 通过传递一个空列表来隐藏X轴刻度 plt.xticks([]) # 通过传递一个函数来自定义刻度标签 def custom_label(x, pos): return f'Value: {x:.2f}' plt.xticks(ticks=custom_ticks, labels=custom_labels, formatter=custom_label) # 显示图表 plt.show()
效果图
补充
tick_params()
方法允许您以精确的方式自定义坐标轴刻度和标签的样式和属性,包括刻度方向、长度、宽度、颜色、标签大小、标签颜色等。通过调整这些参数,您可以创建符合特定需求的定制化图表。1.方法签名
matplotlib.axes.Axes.tick_params(axis='both', **kwargs)
2.常用参数解析
axis
(str, 可选): 指定要自定义刻度参数的坐标轴,可以选择以下值之一:
'both'
(默认值): 自定义X轴和Y轴的刻度参数。'x'
: 仅自定义X轴的刻度参数。'y'
: 仅自定义Y轴的刻度参数。**kwargs
: 其他关键字参数,用于设置刻度和标签的样式和属性。常见的关键字参数包括:
which
(str, 可选): 指定要自定义的刻度类型,可以选择'major'
(主刻度)或'minor'
(次刻度)。direction
(str, 可选): 指定刻度线的方向,可以选择'in'
(朝内)、'out'
(朝外)或'inout'
(内外都有)。length
(float, 可选): 指定刻度线的长度。width
(float, 可选): 指定刻度线的宽度。color
(str, 可选): 指定刻度线的颜色。pad
(float, 可选): 指定刻度标签与刻度线的距离。labelsize
(float or str, 可选): 指定刻度标签的大小。labelcolor
(str, 可选): 指定刻度标签的颜色。- 其他关键字参数用于控制刻度标签的显示格式等。
3.用法示例
下面是一些使用
tick_params()
方法的示例:import matplotlib.pyplot as plt # 创建一个简单的图表 x = [1, 2, 3, 4] y = [1, 2, 1, 3] plt.plot(x, y) # 自定义X轴和Y轴的刻度参数 plt.tick_params(axis='both', which='both', direction='in', length=5, width=2, color='blue') # 自定义X轴的刻度标签 plt.tick_params(axis='x', which='major', labelsize=12, labelcolor='green') # 自定义Y轴的刻度标签 plt.tick_params(axis='y', which='minor', labelsize=10, labelcolor='red') # 隐藏X轴刻度标签 plt.tick_params(axis='x', which='both', bottom=False, top=False) # 隐藏Y轴刻度线 plt.tick_params(axis='y', which='both', left=False, right=False) # 显示图表 plt.show()
5.grid() (网格)
grid()
函数用于控制图表中的网格线的显示与样式。您可以通过设置参数来决定是否显示网格线、显示主要刻度或次要刻度的网格线、设置网格线的样式(如颜色、线型、线宽等),以及指定要绘制网格线的坐标轴。这个函数在帮助将数据点与刻度对齐、提高图表可读性时非常有用。1.函数签名
matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)
2.常用参数解析
b
(bool, 可选): 控制是否显示网格线。如果设置为True
,则显示网格线;如果设置为False
(默认值),则隐藏网格线。which
(str, 可选): 指定要绘制的网格线的类型,可以选择以下值之一:'major'
(默认值): 绘制主要(大)刻度网格线。'minor'
: 绘制次要(小)刻度网格线。'both'
: 同时绘制主要和次要刻度网格线。axis
(str, 可选): 指定要绘制网格线的坐标轴,可以选择以下值之一:'both'
(默认值): 绘制X轴和Y轴的网格线。'x'
: 仅绘制X轴的网格线。'y'
: 仅绘制Y轴的网格线。**kwargs
: 其他关键字参数,通常用于设置网格线的样式和属性,例如颜色、线型、线宽等。3.用法示例
pythonCopy codeimport matplotlib.pyplot as plt # 创建一个简单的图表 x = [1, 2, 3, 4] y = [1, 2, 1, 3] plt.plot(x, y) # 显示主要刻度的网格线,默认样式 plt.grid(True) # 显示次要刻度的网格线,自定义样式 plt.grid(True, which='minor', linestyle='--', linewidth=0.5, color='gray') # 仅显示X轴的网格线 plt.grid(True, axis='x') # 仅显示Y轴的网格线,自定义样式 plt.grid(True, axis='y', linestyle='-.', linewidth=0.5, color='green') # 隐藏网格线 plt.grid(False) # 使用额外的关键字参数设置网格线样式 plt.grid(True, linestyle='-', linewidth=1, color='blue') # 显示图表 plt.show()
6.legend() (图例)
legend()
方法用于在Matplotlib图表中添加图例,以便标识不同数据系列或曲线的含义。您可以通过labels
参数指定图例标签,通过关键字参数控制图例的位置、外观和标题等。图例使得图表更具可读性,帮助观众理解数据的含义。您可以根据需要自定义图例的各个方面,包括标签、位置、样式等。1.函数签名
matplotlib.pyplot.legend(labels=None, **kwargs)
2.常用参数解析
labels
(str or list-like, 可选): 用于指定图例标签的文本。如果提供了一个标签字符串,将创建一个具有该标签的图例项。如果提供了一个列表或元组,将创建多个图例项,每个图例项对应于列表中的一个标签。**kwargs
: 其他关键字参数,用于控制图例的外观和位置。一些常见的关键字参数包括:
loc
(str or int, 可选): 指定图例的位置。可以使用字符串表示位置,如'upper left'
、'lower right'
等,也可以使用整数表示位置代码。默认值为'best'
,表示自动选择最佳位置。title
(str, 可选): 指定图例的标题文本。frameon
(bool, 可选): 控制是否显示图例的边框,默认为True
。fontsize
(float, 可选): 控制图例文本的字体大小。title_fontsize
(float, 可选): 控制图例标题文本的字体大小。bbox_to_anchor
(tuple, 可选): 指定图例的位置,以坐标轴的归一化坐标表示。- 其他关键字参数用于设置图例项的属性,如标记、线型、线宽、颜色等。
3.用法示例
import matplotlib.pyplot as plt # 创建一个简单的图表 x = [1, 2, 3, 4] y1 = [1, 2, 1, 3] y2 = [3, 2, 4, 1] # 绘制两条曲线,并为它们设置标签 plt.plot(x, y1, label='Line 1', linestyle='--', marker='o', color='blue') plt.plot(x, y2, label='Line 2', linestyle='-', marker='s', color='green') # 添加图例,自动选择位置 plt.legend() # 添加图例,自定义位置和标题 plt.legend(loc='upper right', title='Legend') # 自定义图例项的样式 plt.legend(loc='lower left', title='Custom Legend', fontsize=12, frameon=False) # 自定义图例项的标记和线型 plt.legend(loc='best', title='Custom Markers and Linestyles', fontsize=12, markerscale=1.5, handlelength=3, handletextpad=0.5) # 显示图表 plt.show()
效果图
补充方法
在Matplotlib中,这些方法都用于在图形上添加文本、水平线、垂直线、水平线集合、垂直线集合、水平带状区域和垂直带状区域,以及注释。以下是这些方法的简要说明:
text()
方法:
text(x, y, s)
方法用于在指定的坐标(x, y)
处添加文本,文本内容为字符串s
。- 这个方法可以用来标记图形中的特定点或添加注释。
axhline()
和axvline()
方法:
axhline(y, color, linestyle)
用于在指定的水平位置y
上添加水平线。axvline(x, color, linestyle)
用于在指定的垂直位置x
上添加垂直线。- 可以通过参数设置线的颜色和线型。
hlines()
和vlines()
方法:
hlines(y, xmin, xmax, color, linestyle)
用于在指定的水平位置y
上绘制水平线段,从xmin
到xmax
。vlines(x, ymin, ymax, color, linestyle)
用于在指定的垂直位置x
上绘制垂直线段,从ymin
到ymax
。- 同样可以通过参数设置线的颜色和线型。
axhspan()
和axvspan()
方法:
axhspan(ymin, ymax, color, alpha)
用于在指定的垂直区域上绘制带状区域,从ymin
到ymax
,可设置颜色和透明度。axvspan(xmin, xmax, color, alpha)
用于在指定的水平区域上绘制带状区域,从xmin
到xmax
,可设置颜色和透明度。
annotate()
方法:
annotate(text, xy, xytext, arrowprops)
方法用于在图中的指定点xy
处添加注释文本text
。- 可以通过
xytext
参数指定文本的位置,通过arrowprops
参数添加指向注释的箭头。这些方法可以帮助你在Matplotlib图形中添加各种注释、线条和区域,以增强图形的信息传达能力。通过合理使用这些方法,你可以自定义图形并突出显示感兴趣的部分。
4.4图片的显示与保存
savefig()
函数用于将当前的Matplotlib图表保存到文件中,可以指定文件名、分辨率、格式等参数。show()
函数用于在图形用户界面中显示当前的Matplotlib图表,通常用于交互式操作或在集成开发环境 (IDE) 中查看图表。这两个函数是Matplotlib中常用的保存和显示图表的方法。1.
savefig()
函数签名
matplotlib.pyplot.savefig(fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', papertype=None, format=None, transparent=False, bbox_inches=None, pad_inches=0.1, frameon=None, metadata=None, *, backend=None)
常用参数解析
fname
: 要保存的文件名或路径。dpi
(可选): 图像的分辨率(每英寸点数),默认为100。facecolor
(可选): 图像的背景颜色。edgecolor
(可选): 图像的边框颜色。orientation
(可选): 图像的方向,可以是 ‘portrait’(纵向,默认)或 ‘landscape’(横向)。papertype
(可选): 用于打印的纸张类型。format
(可选): 要保存的图像格式,通常为 ‘png’、‘pdf’、‘svg’ 等。transparent
(可选): 如果为True,图像的背景将是透明的。bbox_inches
(可选): 指定图像的边界框,通常可以使用 ‘tight’ 来自动裁剪空白边缘。pad_inches
(可选): 图像周围的填充大小。frameon
(可选): 是否在图像周围绘制一个框架,默认为 None(根据当前设备的默认值)。metadata
(可选): 图像的元数据,通常是一个字典。backend
(可选): 指定要使用的Matplotlib后端。用法示例
import matplotlib.pyplot as plt # 示例1: 保存图表为PNG格式 plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) plt.savefig('my_plot.png') # 示例2: 保存图表为PDF格式,指定分辨率和背景颜色 plt.figure() plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) plt.savefig('my_plot.pdf', dpi=300, facecolor='lightgray') # 示例3: 保存图表为SVG格式,透明背景 plt.figure() plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) plt.savefig('my_plot.svg', transparent=True) # 示例4: 自动裁剪空白边缘 plt.figure() plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) plt.savefig('my_plot_tight.png', bbox_inches='tight')
2.
show()
函数签名
matplotlib.pyplot.show(*args, **kw)
常用参数解析
show()
函数通常不需要传递额外参数。用法示例
import matplotlib.pyplot as plt # 示例: 显示图表 plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) plt.show()
注意
注意保存图片代码应位于plt.show()之前
∵plt.show()会释放figsure资源,∴在显示图像前面保存图像
5.折线图(plot)
以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
5.1基础折线图
# 温度变化折线图
import matplotlib.pyplot as plt
%matplotlib inline
import random
# 1、准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 中文显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制图像
plt.plot(x, y_shanghai, color="r",linestyle='-.',label="上海")
plt.plot(x, y_beijing, color="b",label="北京")
# 显示图例
plt.legend()
# plt.legend(loc="lower left")
# plt.legend(loc=4)
# 修改x y刻度
x_label = ["11分{}秒".format(i) for i in x]
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))
# 显示网格
plt.grid(linestyle='--', alpha=0.5)
# 添加描述 标题
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("上海、北京11点0分到12点之间的温度变化图示")
# 4、显示图像
plt.show()
效果图
5.2多坐标系
igure, axes = plt.subplots(nrows=1, ncols=1, **fig_kw)
示例代码
# 温度变化折线图
import matplotlib.pyplot as plt
%matplotlib inline
import random
# 1、准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 2、创建画布
# plt.figure(figsize=(20,8),dpi=80)
figure, axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)
# 3、绘制图像
axes[0].plot(x, y_shanghai, color="r",linestyle='-.',label="上海")
axes[1].plot(x, y_beijing, color="b",label="北京")
# 显示图例
axes[0].legend()
axes[1].legend()
# plt.legend(loc="lower left")
# plt.legend(loc=4)
# 修改x y刻度
x_label = ["11分{}秒".format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label[::5])
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(0,40,5))
# 显示网格
axes[0].grid(linestyle='--', alpha=0.5)
axes[1].grid(linestyle='--', alpha=0.5)
# 添加描述 标题
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("上海11点0分到12点之间的温度变化图示")
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("北京11点0分到12点之间的温度变化图示")
# 4、显示图像
plt.show()
效果图
5.3数学函数
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
# 1、准备x、y数据
x = np.linspace(-1,1,1000)
y = 2 * x * x
# 2、创建画布
plt.figure(figsize=(20,8), dpi=80)
# 3、绘制图像
plt.plot(x, y)
plt.grid(linestyle="--",alpha=0.5)
plt.show()
效果图
6.散点图(scatter)
用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
示例代码
# 1、准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 3、绘制图像
plt.scatter(x, y)
# 4、显示图像
plt.show()
效果图
7.柱状图(bar)
排列在工作表的列或行中的数据可以绘制到柱状图中。
特点:绘制连离散的数据,能够一眼看出名个数据的大小,比较数据之间的差别(统计/对比)
7.1柱状图(一)
# 1、准备数据
movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 3、绘制柱状图
x_ticks = range(len(movie_names))
plt.bar(x_ticks, tickets, color=['b','r','g','y','c','m','y','k','c','g','b'])
# 修改x刻度
plt.xticks(x_ticks, movie_names)
# 添加标题
plt.title("电影票房收入对比")
# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)
# 4、显示图像
plt.show()
效果图
7.2柱状图(二)
# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']
first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 3、绘制柱状图
x_ticks=[i for i in range(3)]
plt.bar(x_ticks, first_day, width=0.2, label="首日票房")
plt.bar([i+0.2 for i in x_ticks], first_weekend, width=0.2, label="首周票房")
##########为何是i+0.2呢,因为前面设置的柱状图宽度width=0.2,为了紧密相连,同时没有重合,因此设置0.2
# 显示图例
plt.legend()
# 修改刻度,即显示坐标轴上的数字或字符,本例即显示电影名字
plt.xticks([i+0.1 for i in x_ticks], movie_name)
###########柱状图宽度为0.2,为了字符名字在中间,因此相对于前面是加了0.1
# 4、显示图像
plt.show()
效果图
8.直方图(histom)
直方图牵涉统计学的概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。
在坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,称这样的统计图为频数分布直方图。
组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数
组距:每一组两个端点的差
直方图vs柱状图
直方图,形状类似柱状图却有着与柱状图完全不同的含义。
- 数据类型:
- 直方图:主要用于连续型数据,将数据分成若干个区间,然后统计每个区间内的数据数量。
- 柱状图:主要用于离散型数据,通常用于显示各类别的数据数量或频率。
- 横纵坐标:
- 直方图:横坐标表示数据的范围或区间,纵坐标表示在该范围内的数据数量或频率。
- 柱状图:横坐标表示不同的类别或分组,纵坐标表示每个类别的数值。
- 数据处理:
- 直方图:通常需要对数据进行分组(binning),将连续的数据划分为若干个区间,然后统计每个区间内的数据数量。
- 柱状图:可以直接使用离散型数据的类别进行绘制,不需要进行数据的分组。
- 用途:
- 直方图:用于描述数据的分布情况,显示数据的中心趋势和离散程度。
- 柱状图:用于比较不同类别之间的数据,通常用于显示离散数据的频率或数量。
- 连续性:
- 直方图:表示数据的连续性,通常没有间隔。
- 柱状图:表示不同类别之间的离散性,通常有明显的间隔。
- 宽度:
- 直方图:各个区间的宽度可以不同,取决于数据的分布和分组方法。
- 柱状图:各个柱子之间的间隔可以调整,但通常是等宽的。
需求:电影时长分布状况
# 1、准备数据
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 3、绘制直方图
distance = 2 # 组距
group_num = int((max(time) - min(time)) / distance) # 组数=极差/组距
plt.hist(time, bins=group_num, density=True)
# 修改x轴刻度
plt.xticks(range(min(time), max(time) + 2, distance))
# 添加网格
plt.grid(linestyle="--", alpha=0.5)
# 4、显示图像
plt.show()
效果图
9.饼图(pie)
用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
特点:分类数据的占比情况(占比)
# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 3、绘制饼图
plt.pie(place_count, labels=movie_name, colors=['b','r','g','y','c','m','y','k','c','g','y'], autopct="%1.2f%%")
# 显示图例
plt.legend()
plt.axis('equal')
# 4、显示图像
plt.show()
效果图