临沧市住房和城乡建设局门户网站wordpress无法创建配置文件
文章目录
- 一、简介
 - 二、一些基本概念
 - 2.1 图表元素
 - 2.2 常见图表类型
 - 2.3 主要绘图函数及其返回值
 - 2.4 Artists 的概念
 
- 三、基本图表详解
 - 3.1 成对数据
 - 3.11 折线图:plot()
 - 🟨设置图表样式
 - 🟨设置各种标签
 - 🟨设置坐标轴
 - 🟨绘制子图
 - 🟨显示网格线
 - 🟨保存为图片
 
- 3.12 散点图:scatter()
 - 3.13 条形图:bar()
 
- 3.2 统计
 - 3.21 直方图
 - 3.22 箱线图
 - 3.23 饼图
 - 3.24 误差线
 
- 3.3 网格
 - 3.4 不规则网格
 - 3.5 3D和体积数据
 
一、简介
Matplotlib 是一个用于创建静态、动态和交互式图表的 Python 绘图库。它提供了大量的图表类型和工具,适用于数据分析和可视化。
Matplotlib是Python语言及其数值计算库NumPy的绘图库。它提供了一个面向对象的API,可以将绘图嵌入到使用通用GUI工具包(如Tkinter、wxPython、Qt或GTK)的程序中。它还有一个基于状态机(就像OpenGL)的过程式编程“pylab”接口,其设计与MATLAB非常类似。
Matplotlib文档:https://matplotlib.org/stable/index.html
核心特性:
-  
丰富的图表类型:
- 线图、散点图、条形图、饼图、直方图等。
 - 高级图表如等高线图、3D 图表、热力图等。
 
 -  
高度自定义:
- 图形的各种属性(如颜色、线型、标记、标签等)可以自定义。
 - 可以添加标题、标签、图例、网格等。
 
 -  
兼容性强:
- 支持多种输出格式,包括 PNG、PDF、SVG、EPS 等。
 - 与 NumPy 和 Pandas 等库紧密集成,方便数据处理和分析。
 
 -  
交互性:
- 支持交互式绘图,能够响应用户操作。
 - 与 Jupyter Notebook 和 IPython 配合使用,可以创建动态的交互式图表。
 
 
如果你用过matlab,那就太好了,Matplotlib很多地方和matlab是相似的。
 
绘图还有很多不错的其它软件、库,如(只是我用过的):matlab、R、echarts、D3,当然还有plotly 、Tableau 、Power BI 等。
Echarts是基于JS的,在网页上绘图很好用,我最开始用的时候他还是百度的,现在已经转移到 Apache 软件基金会了:https://echarts.apache.org/handbook/zh/get-started/

二、一些基本概念
使用 Matplotlib 进行绘图,了解以下基本概念和操作是非常重要的:
2.1 图表元素

 在 Matplotlib 中,一个图形(Figure)包含多个元素,每个元素负责不同的功能。下面是各个元素的详细介绍及其在图中的作用:
| 元素 | 作用 | 描述 | 
|---|---|---|
| Figure | 图形容器 | 整个图形的顶层容器,可以包含一个或多个子图(Axes)。使用 plt.figure() 创建。 | 
| Axes | 子图区域 | 在 Figure 中定义实际的绘图区域。每个 Axes 对象表示一个坐标系。使用 plt.subplots() 创建。 | 
| Axis | 坐标轴 | Axes 中的坐标轴对象,用于刻度和标签的管理。每个 Axes 对象有两个 Axis(x 和 y)。 | 
| Title | 图表标题 | 图表的标题,通常放在图表的顶部。使用 ax.set_title() 设置。 | 
| Legend | 图例 | 用于解释不同数据系列的标签。使用 ax.legend() 添加。 | 
| Label | 坐标轴标签 | X 轴和 Y 轴的标签。使用 ax.set_xlabel() 和 ax.set_ylabel() 设置。 | 
| Major tick | 主刻度 | 主要刻度线,通常用于显示轴上的主要刻度值。使用 ax.xaxis.set_major_locator() 和 ax.yaxis.set_major_locator() 设置。 | 
| Minor tick | 次刻度 | 辅助刻度线,用于更详细的刻度显示。使用 ax.xaxis.set_minor_locator() 和 ax.yaxis.set_minor_locator() 设置。 | 
| Spine | 坐标轴的边框 | Axes 边缘的线条,通常用于围绕绘图区域。可以使用 ax.spines['top'] 等访问和设置。 | 
| Grid | 网格线 | 背景网格线,帮助读取数据值。使用 ax.grid() 显示或隐藏。 | 
| Line | 数据线 | 连接数据点的线条。使用 ax.plot() 绘制。 | 
| Markers | 数据点标记 | 在数据点上显示的符号(如圆点、方块等)。可以通过 ax.plot() 的 marker 参数设置。 | 
2.2 常见图表类型
| 图表类型 | 简介 | 对应的方法 | 
|---|---|---|
| 线图 | 通过连接数据点的线条显示数据的变化趋势 | plot() | 
| 散点图 | 使用点显示两组数据的关系 | scatter() | 
| 条形图 | 使用矩形条来显示不同类别的数据 | bar(), barh() | 
| 饼图 | 显示各部分在整体中的比例 | pie() | 
| 直方图 | 显示数据的分布情况,通过分桶统计数据频率 | hist() | 
| 箱线图 | 显示数据的分布特征,包括中位数、四分位数及异常值 | boxplot() | 
| 面积图 | 显示随时间变化的数量,类似于线图但通过填充线条下方的区域表示 | fill_between(), stackplot() | 
| 热力图 | 显示数据的密度或频率,通过颜色表示不同数值的大小 | imshow(), pcolormesh(), heatmap() (seaborn) | 
| 极坐标图 | 使用极坐标系绘制数据,适合显示角度和半径的数据 | polar() | 
| 等高线图 | 显示三维数据的等高线,通过等值线表示不同高度 | contour(), contourf() | 
| 气泡图 | 类似于散点图,但通过点的大小表示第三个变量的数据 | scatter()(通过设置点的大小) | 
| 阶梯图 | 显示数据的阶梯变化,通常用于显示分段恒定值的变化 | step() | 
| 蜡烛图 | 显示金融数据的价格变动,通常用于股票和期货市场分析 | mpl_finance.candlestick_ohlc() (需要额外安装 mpl_finance 库) | 
| 三维图 | 显示三维空间中的数据,适合展示复杂的三维关系 | plot_surface(), scatter3D(), plot_wireframe() | 
| 雷达图 | 显示多变量数据,通常用于展示多种特征的综合表现 | plot()(通过极坐标系实现) | 
一些示例:
 
2.3 主要绘图函数及其返回值
以下是一些常用的 Matplotlib 绘图函数及其返回的对象类型。
| 绘图函数 | 返回值类型 | 说明 | 
|---|---|---|
plot() | Line2D 对象列表 | 绘制折线图或散点图,每条线对应一个 Line2D 对象 | 
scatter() | PathCollection 对象 | 绘制散点图,返回一个 PathCollection 对象 | 
bar() | BarContainer 对象 | 绘制柱状图,返回一个 BarContainer 对象 | 
hist() | 列表 | 绘制直方图,返回(n, bins, patches) | 
boxplot() | 字典 | 绘制箱线图,返回一个包含多个 Line2D 和 Patch 对象的字典 | 
pie() | 列表 | 绘制饼图,返回 Wedge 对象的列表 | 
imshow() | AxesImage 对象 | 显示图像数据,返回一个 AxesImage 对象 | 
contour() | QuadContourSet 对象 | 绘制等高线图,返回一个 QuadContourSet 对象 | 
contourf() | QuadContourSet 对象 | 绘制填充等高线图,返回一个 QuadContourSet 对象 | 
pcolormesh() | QuadMesh 对象 | 绘制伪彩色图,返回一个 QuadMesh 对象 | 
errorbar() | ErrorbarContainer 对象 | 绘制带误差条的图,返回一个 ErrorbarContainer 对象 | 
2.4 Artists 的概念
在 Matplotlib 中,“Artists” 是一个广泛使用的概念,它指的是图形元素的抽象表示。所有在图形上绘制的内容都是一个 Artist 对象,包括但不限于图形、文本、标签、图例等。
Artists 可以分为以下几类:
-  
基本元素 (Primitive Elements):
- 这些是最基本的图形元素,例如 
Line2D、Rectangle、Circle、Text等。 
 - 这些是最基本的图形元素,例如 
 -  
容器 (Containers):
- 这些是用于组织其他 
Artist的对象。例如,Figure是最高级别的容器,它包含所有的绘图;Axes是次一级的容器,它包含具体的绘图区域和图形元素。 
 - 这些是用于组织其他 
 
以下是一些常见的 Artist 类及其用途:
| 类名 | 说明 | 
|---|---|
Figure | 整个图形窗口或绘图区域,是最高级别的容器 | 
Axes | 一个具体的绘图区域,包含坐标轴、标题、标签等 | 
Axis | 坐标轴,包括刻度、标签等 | 
Line2D | 用于绘制二维线条 | 
Rectangle | 用于绘制矩形 | 
Circle | 用于绘制圆形 | 
Text | 用于绘制文本 | 
Patch | 用于绘制任意形状的图形,如多边形 | 
Legend | 用于绘制图例 | 
Image | 用于绘制图像 | 
概念,有助于你理解官网文档。
三、基本图表详解
你也可以去看官网的例子,都有代码的:https://matplotlib.org/stable/plot_types/index.html
以及更全的示例,有几百种图:https://matplotlib.org/stable/gallery/index.html
太多了,详解几个常见的吧。
本节我会在第一个绘图示例中讲解一些图表通用的属性设置。
3.1 成对数据
3.11 折线图:plot()
matplotlib.pyplot.plot() 方法是最常用的绘图函数之一。它通常用于创建折线图,但也可以用来绘制其他类型的图形。
基本用法:
import matplotlib.pyplot as pltx = [1, 2, 3, 4]
y = [1, 4, 9, 16]plt.plot(x, y)
plt.show()
 
🟢必选参数: x, y:这两个参数分别是 X 轴和 Y 轴的数据,可以是列表、元组、NumPy 数组等。x 和 y 的长度必须相同。没数据就画不出图了。
🟢可选参数:主要用来设置图表的样式:如线条样式、轴标签、轴取值等等。
🟢函数返回值:matplotlib.pyplot.plot()返回值是一个 Line2D 对象的列表 (一条线就是一个Line2D对象的列表,访问记得加索引)。Line2D 对象表示绘制的线条或数据系列。每个 Line2D 对象包含有关绘图线条的信息,例如数据点、样式、颜色等。
🟨设置图表样式
🟣(1)直接通过matplotlib.pyplot.plot()的可选参数设置
这种方法的优点就是简单快捷。
先看示例:
plt.plot(x, y, color='purple',          # 线条颜色linestyle=':',           # 线条样式marker='o',              # 标记样式markersize=8,            # 标记大小linewidth=2.0,           # 线条宽度alpha=0.7,               # 透明度label='Data Line')       # 图例标签
 
以下是 matplotlib.pyplot.plot() 方法的常用可选参数的详细列表:
| 参数 | 类型 | 描述 | 示例 | 
|---|---|---|---|
| color | 字符串、十六进制颜色码、RGB 元组 | 线条的颜色。可以用颜色名称、十六进制颜色码或 RGB 元组指定。 | 'red', '#FF0000', (1, 0, 0) | 
| linestyle | 字符串 | 线条的样式。常用样式包括实线、虚线、点线等。 | '-'(实线), '--'(虚线), ':'(点线), '-.'(点划线) | 
| linewidth | 浮点数 | 线条的宽度。默认为 1.0。 | 2.0 | 
| marker | 字符串 | 数据点的标记样式。常用标记包括圆点、方块、三角形等。 | 'o'(圆点), 's'(方块), '^'(三角形) | 
| markersize | 浮点数 | 标记的大小。默认为 6。 | 10 | 
| label | 字符串 | 图例中的标签。和 plt.legend()配合使用。 | 'Data Line' | 
| alpha | 浮点数 | 线条的透明度,范围从 0(完全透明)到 1(完全不透明)。 | 0.5 | 
| zorder | 整数 | 图形的层级顺序,较高的值使图形位于较上层。 | 2 | 
| markeredgecolor | 字符串、十六进制颜色码、RGB 元组 | 标记边缘的颜色。 | 'black', '#000000' | 
| markeredgewidth | 浮点数 | 标记边缘的宽度。默认为 1。 | 1.5 | 
| markerfacecolor | 字符串、十六进制颜色码、RGB 元组 | 标记内部的颜色。 | 'blue', '#0000FF' | 
| dashes | 序列或布尔值 | 自定义虚线样式。传递一个包含线段和间隔的序列。 | (5, 2, 1, 2) | 
| clip_on | 布尔值 | 是否裁剪超出轴范围的部分。默认为 True。 | False | 
| picker | 布尔值、函数 | 允许点击图形元素进行交互。 | True | 
| dash_capstyle | 字符串 | 虚线的端点样式。可选值包括 'butt'、'round'、'projecting'。 | 'round' | 
| dash_joinstyle | 字符串 | 虚线的连接样式。可选值包括 'miter'、'round'、'bevel'。 | 'round' | 
线条的颜色、样式和标记可以使用格式化字符串(format string)来指定,而不用分别设置color、linestyle、maker这3个参数,即:
plt.plot(x, y,  color='red', linestyle='-',marker='o')
# 等价于
plt.plot(x,y,'r-o')
 
注意:
- 格式字符串必须紧跟x、y数据后面,不能放在其它参数后面;
 - 格式字符串后面还可以照常设置其它参数;
 - 颜色、线形、标记可以设置任意数量,如
'r','ro','r-o'; - 当颜色与其他参数一起指定时,颜色值只能用简写,
'red-o'是错的; - 只指定一个参数时,颜色可以用任何表示方法,线形和标记只能用简写。
 
🔹颜色表示:
支持的格式:
- RGB
元组:如,(0.1, 0.2, 0.5) - RGBA
元组:如,(0.1, 0.2, 0.5, 0.3)。和rgb一样取值在[0,1],rgba最后一位是透明度。 - 十六进制RGB或RGBA
字符串:'#abc'等价'#aabbcc'。不区分大小写, - 灰度值的闭区间内浮点值的
字符串表示:如'0'是黑色,'1'是白色。 - 基本颜色的简写字符串(使用格式化字符串时必须使用): 
'b'as blue'g'as green'r'as red'c'as cyan'm'as magenta'y'as yellow'k'as black'w'as white
 
还有一些其它的颜色表示方法也支持,不常用,不展开了。
这些颜色表示方法,不只是color参数能用,其它需要设置颜色的参数,也可以灵活使用的。
🔹线形表示:
蓝色是给参数赋值是使用的格式。
 
 注意,格式化字符串中,只能使用:'-' 表示 ‘solid’、'--' 表示’dashed’、'-.' 表示’dashdot’、':' 表示’dotted’。
🔹标记表示:
常用的:
 
🟣(2)通过 matplotlib.pyplot.plot()返回的 Line2D 对象来设置和调整图形的样式和属性
这种方式提供更细粒度的控制、更高的代码灵活性、方便修改和更新。
Line2D 对象是 matplotlib 中的一个核心类,用于表示和控制绘图中的线条。它包含了有关线条的所有属性和方法,可以用来创建、修改和查询线条的各种特性。
.plot()画了几条线,返回的Line2D对象列表就有几个元素,分别代表这些线。
写法:
f = plt.plot(x,y)
f, = plt.plot(x,y)
f = plt.plot(x1,y1,x2,y2) 
f1,f2 = plt.plot(x1,y1.x2,y2)
 
第1、3行的写法,返回值是列表。2、4行返回值则是对应的Line2D对象(Python的解包赋值)。
解包赋值(unpacking assignment)是 Python 中的一种语法特性,允许你将一个序列(如列表、元组等)中的多个元素一次性赋值给多个变量。这种方式可以简化代码,并使得变量赋值变得更加直观。左右元素数量要相等。
🔹Line2D对象支持的方法:
| 方法 | 说明 | 
|---|---|
get_alpha() | 获取线条的透明度 | 
get_animated() | 检查线条是否设置为动画 | 
get_antialiased() | 获取线条的抗锯齿设置 | 
get_c() | 获取线条的颜色 | 
get_clip_box() | 获取裁剪边界框 | 
get_clip_on() | 检查裁剪是否启用 | 
get_clip_path() | 获取裁剪路径 | 
get_color() | 获取线条的颜色 | 
get_contains() | 获取包含测试函数 | 
get_dash_capstyle() | 获取虚线端点样式 | 
get_dash_joinstyle() | 获取虚线连接样式 | 
get_dashes() | 获取虚线样式 | 
get_data() | 获取 x 和 y 数据 | 
get_drawstyle() | 获取绘制样式 | 
get_ec() | 获取标记的边缘颜色 | 
get_figure() | 获取所属的 Figure 对象 | 
get_fillstyle() | 获取标记的填充样式 | 
get_gid() | 获取对象的全局唯一标识符 | 
get_hatch() | 获取填充图案 | 
get_label() | 获取线条的标签 | 
get_linestyle() | 获取线条样式 | 
get_linewidth() | 获取线条宽度 | 
get_ls() | 获取线条样式(别名) | 
get_lw() | 获取线条宽度(别名) | 
get_marker() | 获取标记样式 | 
get_markeredgecolor() | 获取标记的边缘颜色 | 
get_markeredgewidth() | 获取标记的边缘宽度 | 
get_markerfacecolor() | 获取标记的填充颜色 | 
get_markerfacecoloralt() | 获取标记的替代填充颜色 | 
get_markersize() | 获取标记大小 | 
get_markevery() | 获取标记的间隔 | 
get_path() | 获取线条的路径 | 
get_picker() | 获取拾取属性 | 
get_pickradius() | 获取拾取半径 | 
get_transform() | 获取变换属性 | 
get_visible() | 检查线条是否可见 | 
get_xdata() | 获取 x 轴数据 | 
get_ydata() | 获取 y 轴数据 | 
set_alpha(alpha) | 设置线条的透明度 | 
set_animated(b) | 设置线条是否为动画 | 
set_antialiased(b) | 设置线条的抗锯齿 | 
set_c(c) | 设置线条的颜色 | 
set_clip_box(rect) | 设置裁剪边界框 | 
set_clip_on(b) | 设置裁剪是否启用 | 
set_clip_path(path, transform) | 设置裁剪路径 | 
set_color(c) | 设置线条的颜色 | 
set_contains(picker) | 设置包含测试函数 | 
set_dash_capstyle(s) | 设置虚线端点样式 | 
set_dash_joinstyle(s) | 设置虚线连接样式 | 
set_dashes(seq) | 设置虚线样式 | 
set_data(x, y) | 设置 x 和 y 数据 | 
set_drawstyle(s) | 设置绘制样式 | 
set_figure(fig) | 设置所属的 Figure 对象 | 
set_fillstyle(s) | 设置标记的填充样式 | 
set_gid(gid) | 设置对象的全局唯一标识符 | 
set_hatch(hatch) | 设置填充图案 | 
set_label(label) | 设置线条的标签 | 
set_linestyle(s) | 设置线条样式 | 
set_linewidth(w) | 设置线条宽度 | 
set_marker(m) | 设置标记样式 | 
set_markeredgecolor(ec) | 设置标记的边缘颜色 | 
set_markeredgewidth(ew) | 设置标记的边缘宽度 | 
set_markerfacecolor(fc) | 设置标记的填充颜色 | 
set_markerfacecoloralt(fc) | 设置标记的替代填充颜色 | 
set_markersize(sz) | 设置标记大小 | 
set_markevery(every) | 设置标记的间隔 | 
set_path_effects(path_effects) | 设置路径效果 | 
set_picker(picker) | 设置拾取属性 | 
set_pickradius(r) | 设置拾取半径 | 
set_transform(t) | 设置变换属性 | 
set_url(url) | 设置 URL | 
set_visible(b) | 设置线条是否可见 | 
set_xdata(x) | 设置 x 轴数据 | 
set_ydata(y) | 设置 y 轴数据 | 
如果你需要更多细节,建议参考 Matplotlib 官方文档。
🟨设置各种标签
包括标题、轴标签、文本、点的注释、图例。
🔹标题:
通常:
plt.plot(x, y)
plt.title("这是图表的标题")
 
或者:
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("这是图表的标题")
 
这是绘制子图的,fig代表整张图,ax代表这个子图(即Axes)。
标题是整张图或者子图的标题,所以Figure对象(.title())和Axes(.set_title())对象才能设置,前面提到的Line2D这样的对象是不能设置标题的。
可以使用 fig.suptitle() 方法为整个图形(包含多个子图)设置全局标题。
标题样式:
plt.title("这是图表的标题", fontdict={'fontsize': 18, 'fontweight': 'bold', 'family': 'simsun', 'color': 'green'})
 
字体名称在电脑搜索栏搜索字体,点进去,就会看到字体,名称就是xxx.ttf。xxx就是这里要用的名称。
Matplotlib的默认字体是不能显示中文的,你不用在所有使用中文标签的函数中都单独设置一遍字体,可以设置一个全局字体,如:
import matplotlib.pyplot as plt
import matplotlib as mpl# 全局设置字体属性
mpl.rcParams['font.size'] = 14
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.weight'] = 'bold'x = [1, 2, 3, 4]
y = [1, 4, 9, 16]plt.plot(x, y)
plt.title("这是标题")
plt.show()
 
🔹轴标签:
和标题设置类似的,就是坐标轴起个名字。
使用 plt.xlabel() 和 plt.ylabel()或者 ax.set_xlabel() 和 ax.set_ylabel()。
样式设置类似的。
🔹图例:
设置图例(legend)可以帮助识别不同的图形元素,如线条、点、柱状图等。
使用label+.legend():
import matplotlib.pyplot as pltx = [1, 2, 3, 4]
y1 = [1, 4, 9, 16]
y2 = [1, 2, 3, 4]plt.plot(x, y1, label='线条 1')
plt.plot(x, y2, label='线条 2')# 添加图例
plt.legend()
plt.show()
 
或者使用一个列表传入:
plt.legend(['Line1','Line2'])
 
若只显示特定对象的图例,比如只显示Line1和Line2:
ax.legend(handles=[line1, line2], labels=['自定义线条 1', '自定义线条 2'])
 
Axes对象也是一样的方法。
图例的位置:upper left、upper right、lower left、lower right、upper center、lower center、center left、center right、center、best。
ax.legend(loc='upper left')
 
可以通过 prop 参数设置字体大小和其他字体属性,通过 frameon 参数设置是否显示图例的边框,通过 shadow 参数设置图例的阴影效果。
ax.legend(loc='upper right', prop={'size': 14, 'weight': 'bold'},  # 字体属性frameon=False,  # 不显示边框shadow=True  # 显示阴影
)
 
🔹文本:
.text() 方法可以在图形的任意位置添加文本。需要指定文本的位置(x 和 y 坐标)和内容。
import matplotlib.pyplot as pltx = [1, 2, 3, 4]
y = [1, 4, 9, 16]plt.plot(x, y)
plt.text(2, 10, "这里是文本", fontsize=14, color='blue', fontweight='bold', style='italic')  # 设置文本属性
plt.show()
 
🔹注释:
 .annotate() 方法不仅可以添加文本,还可以绘制箭头或其他标记来指示文本所指的位置。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mplmpl.rcParams['font.family'] = 'simsun'fig, ax = plt.subplots(figsize=(5, 2.7))t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2 * np.pi * t)
line, = ax.plot(t, s, lw=2)ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05))ax.set_ylim(-2, 2)plt.grid()
plt.show()
 

 详细参数:https://matplotlib.org/stable/users/explain/text/annotations.html#plotting-guide-annotation
🔹文本中使用latex表示公式:
ax.set_title(r'$\sigma_i=15$')
 
各种字母、数学符号的表示:https://matplotlib.org/stable/users/explain/quick_start.html#using-mathematical-expressions-in-text
🟨设置坐标轴
每个Axes都有2个(或3个)坐标轴。
🔹设置刻度比例:比如对数(log)、线性(linear)等
import matplotlib.pyplot as plt
import numpy as npx = np.logspace(1, 10, 100)
y = x ** 2fig, axs = plt.subplots(1, 2)axs[0].plot(x, y, 'b-*')
axs[0].set_xscale('log')axs[1].plot(x, y, 'r-o')
axs[1].set_yscale('log')plt.show()
 

🔹设置坐标范围
plt.xlim(left, right)用于设置 x 轴的范围,其中 left 是最小值,right 是最大值。plt.ylim(bottom, top)用于设置 y 轴的范围,其中 bottom 是最小值,top 是最大值。
🔹设置刻度和刻度标签标签
import matplotlib.pyplot as plt# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 17, 20]# 创建图形和轴对象
fig, ax = plt.subplots()
ax.plot(x, y)# 设置 x 轴和 y 轴的刻度
ax.set_xticks([1, 2, 3, 4, 5])  # 设置 x 轴的刻度位置
ax.set_yticks([10, 15, 20])     # 设置 y 轴的刻度位置# 设置 x 轴和 y 轴的刻度标签
ax.set_xticklabels(['A', 'B', 'C', 'D', 'E'])  # 设置 x 轴的刻度标签
ax.set_yticklabels(['Low', 'Medium', 'High'])  # 设置 y 轴的刻度标签# 显示图形
plt.show()
 
即在相应的位置显示刻度值,如果设置了刻度标签,就显示标签。
或者等距显示:
# 设置 x 轴和 y 轴的刻度间隔
ax.xaxis.set_major_locator(MultipleLocator(2))  # x 轴每隔 2 显示一个刻度
ax.yaxis.set_major_locator(MultipleLocator(5))  # y 轴每隔 5 显示一个刻度
 
有时候每个刻度标签可能比较长,需要旋转一下文本方向:
# 设置 x 轴和 y 轴的刻度标签方向
ax.tick_params(axis='x', labelrotation=45)  # x 轴刻度标签旋转 45 度
ax.tick_params(axis='y', labelrotation=90)  # y 轴刻度标签旋转 90 度
 
🔹设置双坐标轴:
双x轴同理。
import matplotlib.pyplot as plt
import matplotlib as mplmpl.rcParams['font.family'] = 'simsun'# 创建示例数据
x = [1, 2, 3, 4, 5]
y1 = [10, 15, 13, 17, 20]
y2 = [80, 120, 150, 170, 200]# 创建图形和主轴对象
fig, ax1 = plt.subplots()# 绘制第一个 y 轴的数据
ax1.plot(x, y1, 'b-*', label='y1数据')
ax1.set_xlabel('X轴标签')
ax1.set_ylabel('Y1轴标签', color='g')
ax1.tick_params(axis='y', labelcolor='g')# 创建第二个 y 轴,使用 twinx() 方法
ax2 = ax1.twinx()
ax2.plot(x, y2, 'r:o', label='y2数据')
ax2.set_ylabel('Y2轴标签', color='b')
ax2.tick_params(axis='y', labelcolor='b')# 添加图例
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')# 显示图形
plt.show()
 

🟨绘制子图
在 matplotlib 中,可以使用 .subplot 和 .subplots 方法来绘制多个子图:
-  
plt.subplot(nrows, ncols, index):nrows: 子图的行数。ncols: 子图的列数。index: 当前子图的位置,从 1 开始(按行优先顺序)。
 -  
plt.subplots(nrows, ncols, figsize=(width, height)):nrows: 子图的行数。ncols: 子图的列数。figsize: 图形的尺寸(宽度, 高度),以英寸为单位。- 返回 
fig和axs,其中fig是图形对象,axs是一个包含所有子图的数组。 
 
subplot 方法用于创建单个图形中的多个子图,按照指定的行列布局排列。你可以逐个创建子图并在上面绘制数据。
import matplotlib.pyplot as plt# 创建图形和子图
plt.figure(figsize=(10, 6))# 第一个子图
plt.subplot(2, 2, 1)  # 2 行 2 列的网格中的第一个子图
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('子图 1')# 第二个子图
plt.subplot(2, 2, 2)  # 2 行 2 列的网格中的第二个子图
plt.bar([1, 2, 3], [4, 5, 6])
plt.title('子图 2')# 第三个子图
plt.subplot(2, 2, 3)  # 2 行 2 列的网格中的第三个子图
plt.scatter([1, 2, 3], [4, 5, 6])
plt.title('子图 3')# 第四个子图
plt.subplot(2, 2, 4)  # 2 行 2 列的网格中的第四个子图
plt.hist([1, 2, 3, 4, 5])
plt.title('子图 4')# 调整布局以避免重叠
plt.tight_layout()# 显示图形
plt.show()
 
subplots 方法一次性创建多个子图,并返回一个包含所有子图的数组。这个方法适用于当你需要创建网格布局的子图时。
import matplotlib.pyplot as plt# 创建图形和子图
fig, axs = plt.subplots(2, 2, figsize=(10, 6))# 第一个子图
axs[0, 0].plot([1, 2, 3], [4, 5, 6])
axs[0, 0].set_title('子图 1')# 第二个子图
axs[0, 1].bar([1, 2, 3], [4, 5, 6])
axs[0, 1].set_title('子图 2')# 第三个子图
axs[1, 0].scatter([1, 2, 3], [4, 5, 6])
axs[1, 0].set_title('子图 3')# 第四个子图
axs[1, 1].hist([1, 2, 3, 4, 5])
axs[1, 1].set_title('子图 4')# 调整布局以避免重叠
plt.tight_layout()# 显示图形
plt.show()
 
subplot_mosaic 是 matplotlib 3.4.0 版本引入的一个功能,允许你通过定义一个网格布局的“马赛克”来创建子图。这种方法比传统的 subplot 方法更灵活,因为你可以使用字符串来定义布局,而不是指定行列数。
-  
plt.subplot_mosaic(layout, figsize=(width, height)):layout: 一个嵌套的列表,其中每个子列表表示一行,每个元素表示一个子图的标识符。相同的标识符表示共享同一个子图区域。figsize: 图形的尺寸(宽度, 高度),以英寸为单位。- 返回 
fig和axs,其中fig是图形对象,axs是一个字典,键是子图的标识符,值是对应的Axes对象。 
 -  
使用标识符:
- 在 
layout中,标识符是用来指定子图的位置和布局的。你可以根据需要自定义这些标识符,以适应复杂的布局需求。 
 - 在 
 
import matplotlib.pyplot as plt
import matplotlib as mplmpl.rcParams['font.family'] = 'simsun'# 使用 subplot_mosaic 创建子图布局
fig, axs = plt.subplot_mosaic([['A', 'B'],['C', 'B'],],figsize=(10, 8)
)# 在子图 'A' 上绘制数据
axs['A'].plot([1, 2, 3], [4, 5, 6])
axs['A'].set_title('子图 A')
axs['A'].grid(which='both', linestyle='--', linewidth=0.5, color='c')# 在子图 'B' 上绘制数据
axs['B'].bar([1, 2, 3], [4, 5, 6])
axs['B'].set_title('子图 B')
axs['B'].grid(which='both', linestyle=':', linewidth=0.5, color='y')# 在子图 'C' 上绘制数据
axs['C'].scatter([1, 2, 3], [4, 5, 6])
axs['C'].set_title('子图 C')
axs['C'].grid(which='both', linestyle='-', linewidth=0.5, color='r')# 调整布局以避免重叠
plt.tight_layout()
# 显示图形
plt.show()
 

🟨显示网格线
plt.grid(which='both', linestyle='--', linewidth=0.5, color='gray')
 
| 参数 | 类型 | 默认值 | 说明 | 
|---|---|---|---|
which | str | ‘both’ | 指定要显示的网格线类型: - 'both':显示主网格线和次网格线- 'major':显示主网格线- 'minor':显示次网格线 | 
axis | str | ‘both’ | 指定要应用网格线的轴: - 'both':对 x 轴和 y 轴应用网格线- 'x':仅对 x 轴应用网格线- 'y':仅对 y 轴应用网格线 | 
color | str | ‘black’ | 网格线的颜色。可以是颜色名称、RGB 颜色值或十六进制颜色代码,如 'red'、'#FF5733' | 
linestyle | str | ‘-’ | 网格线的样式: - '-':实线- '--':虚线- ':':点线- '-.':点划线 | 
linewidth | float | 1.0 | 网格线的宽度,以磅为单位 | 
🟨保存为图片
plt.savefig() 是 matplotlib 中用于将当前图形保存到文件的方法。它可以保存为多种文件格式,包括 PNG、PDF、SVG、EPS 等。你可以使用 plt.savefig() 方法来保存图形以便后续查看、分享或嵌入到文档中。
import matplotlib.pyplot as plt# 示例数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 17, 20]# 创建图形和轴对象
plt.plot(x, y, marker='o')# 添加标题和标签
plt.title('保存图形示例')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')# 保存图形到文件
plt.savefig('my_plot.png')  # 保存为 PNG 格式# 显示图形
plt.show()
 
| 参数 | 类型 | 默认值 | 说明 | 
|---|---|---|---|
fname | str | None | 文件名或路径。支持相对路径和绝对路径,文件扩展名决定了保存的格式。 | 
dpi | int | 100 | 图像的分辨率,以每英寸点数(DPI)为单位。较高的 DPI 值会产生更高质量的图像。 | 
bbox_inches | str | ‘tight’ | 设定边界框的大小。'tight' 自动调整边界框以适应图形内容。 | 
pad_inches | float | 0.1 | 图像边界与内容之间的填充空间,以英寸为单位。 | 
transparent | bool | False | 如果为 True,背景将透明,适用于 PNG 格式。 | 
quality | int | 95 | 图像质量,适用于 JPEG 格式,取值范围 1-100。 | 
format | str | None | 文件格式,如果 fname 参数中包含扩展名,则此参数可以省略。 | 
facecolor | str | ‘w’ (white) | 图像的背景颜色。'w' 表示白色,'none' 表示透明。 | 
edgecolor | str | ‘w’ (white) | 图像的边缘颜色。 | 
前面通过折线图引入,介绍了Matplotlib绘图的各种常用基本操作。但仍然只是冰山一角,还有很多设置、特性没有展开说,感兴趣的部分去官网看文档即可。
3.12 散点图:scatter()
scatter() 是 matplotlib 中用于绘制散点图的函数。散点图显示了两个变量之间的关系,通过将数据点在二维坐标系中标记出来。每个点的位置由其 x 和 y 坐标决定,点的颜色和大小也可以根据其他变量进行编码。
import matplotlib.pyplot as plt# 示例数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 17, 20]# 创建散点图
plt.scatter(x, y)# 添加标签和标题
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.title('散点图示例')# 显示图形
plt.show()
 
x: x 轴的数据坐标。y: y 轴的数据坐标。s: 点的大小。可以是一个单一的数值,也可以是一个与x和y长度相同的数组。c: 点的颜色。可以是单一颜色,也可以是一个颜色数组,用于根据数据值设置颜色。cmap: 如果c是一个数组,可以使用cmap指定颜色映射。常见的 colormap 包括'viridis'、'plasma'、'inferno'、'magma'。alpha: 点的透明度,范围从 0(完全透明)到 1(完全不透明)。marker: 点的形状,如'o'(圆形)、's'(方形)、'^'(三角形)等。edgecolor: 点的边缘颜色。linewidths: 点的边缘线宽。
3.13 条形图:bar()
import matplotlib.pyplot as plt# 示例数据
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 25]# 创建图形
plt.figure(figsize=(8, 6))# 绘制条形图
plt.bar(categories, values)# 添加标题和标签
plt.title('条形图示例')
plt.xlabel('类别')
plt.ylabel('值')# 显示图形
plt.show()
 
| 参数 | 类型 | 默认值 | 说明 | 
|---|---|---|---|
x | array-like | None | 条形图的 x 轴数据,即类别或位置。 | 
height | array-like | None | 条形图的高度或长度。 | 
width | float | 0.8 | 条形的宽度,默认为 0.8。如果绘制水平条形图,则为条形的高度。 | 
align | str | ‘center’ | 条形的对齐方式: - 'center':中心对齐- 'edge':边缘对齐 | 
color | str, array-like | None | 条形的颜色,可以是颜色名称、RGB 颜色值、十六进制颜色代码或颜色列表。 | 
edgecolor | str | ‘black’ | 条形边缘的颜色。 | 
linewidth | float | 1.0 | 条形边缘的宽度,以磅为单位。 | 
tick_label | array-like | None | 设置 x 轴刻度标签。 | 
hatch | str | None | 条形的填充样式,如 '/'、'\\'、`’ | 
垂直条形图:bar()
 水平条形图:barh()
太多了,先写这么多吧,官网都有教程的。
