文章目录

  • 一、坐标轴概述
    • 1. 坐标轴介绍
    • 2. 坐标轴相关属性
  • 二、坐标轴
    • 1. axes() 方法介绍
    • 2. 示例:添加多个绘图区域
  • 三、坐标轴的刻度
    • 1. 坐标轴的刻度介绍
    • 2. 刻度定位器和格式器
      • 2.1 刻度定位器
      • 2.2 刻度格式器
      • 2.3 示例:刻度定位和格式
    • 3. 刻度样式
      • 3.1 tick_params()方法介绍
      • 3.2 示例:刻度样式
    • 4. 示例:某地区24小时的平均风速
  • 四、轴脊(Spines)
    • 1. 轴脊介绍
    • 2. 隐藏轴脊
      • 2.1 通过 axis() 方法
      • 2.2 通过 `set_visible()` 方法
      • 2.3 示例:绘制多边形(隐藏轴脊)
      • 2.4 示例:2018年到2022年的快递业务量及其增长速度
    • 3. 移动轴脊
      • 3.1 通过 set_position() 方法
      • 3.2 示例:绘制多边形(移动轴脊)


一、坐标轴概述

在 Matplotlib 中,坐标轴(Axes) 是绘图的核心区域,它是图形中实际绘制数据的部分,包含刻度、标签、网格线以及数据曲线等元素。一个 Figure(画布)可以包含一个或多个 Axes(子图),每个 Axes 都拥有独立的 x 轴和 y 轴(在三维图中还包括 z 轴)。

1. 坐标轴介绍

Axes 并不是简单的“坐标轴线”,而是指图表中的绘图区域,包括:

  • X 轴和 Y 轴:定义数据的数值尺度;
  • 刻度(Ticks):坐标轴上的标记点;
  • 刻度标签(Tick Labels):刻度对应的数值或文字说明;
  • 轴标签(Axis Labels):描述坐标轴含义的文字(如“时间”、“温度”);
  • 标题(Title):子图的标题;
  • 图例(Legend):用于标识不同数据系列;
  • 网格线(Grid):辅助读数的背景线。

🔹 注意:不要将 AxesAxis 混淆:

  • Axes:整个绘图区域(可理解为“子图”);
  • Axis:单个坐标轴对象(如 x 轴或 y 轴),是 Axes 的组成部分。

2. 坐标轴相关属性

以下是 Matplotlib 中 Axes 和其子对象(如 AxisTick)常用属性的详细说明表:

属性类型获取方式描述
ax.xaxismatplotlib.axis.XAxisax.xaxisX 轴对象,控制 x 轴的刻度、标签、方向等
ax.yaxismatplotlib.axis.YAxisax.yaxisY 轴对象,控制 y 轴的刻度、标签、方向等
ax.xaxis.labelTextax.xaxis.labelX 轴标签文本对象
ax.yaxis.labelTextax.yaxis.labelY 轴标签文本对象
ax.titleTextax.title子图标题对象
ax.xaxis.get_ticklocs() / get_ticks()arrayax.xaxis.get_ticklocs()获取 x 轴刻度位置
ax.yaxis.get_ticklocs() / get_ticks()arrayax.yaxis.get_ticklocs()获取 y 轴刻度位置
ax.xaxis.get_ticklabels()list of Textax.xaxis.get_ticklabels()获取 x 轴刻度标签对象列表
ax.yaxis.get_ticklabels()list of Textax.yaxis.get_ticklabels()获取 y 轴刻度标签对象列表
ax.xaxis.set_ticks()方法ax.xaxis.set_ticks(ticks)设置 x 轴刻度位置
ax.yaxis.set_ticks()方法ax.yaxis.set_ticks(ticks)设置 y 轴刻度位置
ax.xaxis.set_ticklabels()方法ax.xaxis.set_ticklabels(labels)设置 x 轴刻度标签
ax.yaxis.set_ticklabels()方法ax.yaxis.set_ticklabels(labels)设置 y 轴刻度标签
ax.grid()方法ax.grid(True)显示网格线
ax.set_xlim() / ax.set_ylim()方法ax.set_xlim(left, right)设置坐标轴数据范围
ax.set_xlabel() / ax.set_ylabel()方法ax.set_xlabel('文本')设置坐标轴标签
ax.set_title()方法ax.set_title('标题')设置子图标题
ax.spinesSpines 字典ax.spines['left']控制坐标轴边框(如左、右、上、下 spine)的显示与样式

二、坐标轴

1. axes() 方法介绍

在 Matplotlib 中,plt.axes() 方法用于向当前图形(figure)中添加一个新的坐标轴(Axes)。这个方法提供了非常灵活的方式来定义新的绘图区域的位置和大小,也可以用来创建具有不同坐标系的子图。通过调整参数,可以精确控制新坐标轴的位置、尺寸及其与其他元素的关系。

plt.axes() 方法的参数如下:

参数类型默认值描述
arglist or tuple or NoneNone定义新坐标轴的位置和大小。
- 当为 None 时,创建一个与默认坐标轴重叠的新坐标轴。
- 当为 [left, bottom, width, height] 列表或元组时,分别指定新坐标轴距离画布左边、底部的距离以及宽度和高度的比例(0到1之间)。
projectionstr or NoneNone指定坐标轴的投影类型。例如 'polar' 表示极坐标系。
polarboolFalse如果为 True,则使用极坐标系。此参数是为了向后兼容性而保留的;推荐直接使用 projection='polar'
sharex, shareyAxes object or NoneNone与其它坐标轴共享X轴或Y轴。这在创建多个子图时很有用,以确保它们之间的尺度一致。

2. 示例:添加多个绘图区域

import matplotlib.pyplot as plt  # 导入 matplotlib.pyplot 模块,用于绘图# 创建一个新的图形(figure),并设置背景颜色为浅灰色
fig = plt.figure(facecolor='lightgray')# 在图形上添加第一个坐标轴(ax1),位置和大小由矩形定义 [left, bottom, width, height]
# 这里 left=0.1, bottom=0.6, width=0.3, height=0.3 表示 ax1 的位置和大小
ax1 = plt.axes([0.1, 0.6, 0.3, 0.3])# 添加第二个坐标轴(ax2),参数含义同上
ax2 = plt.axes([0.5, 0.6, 0.3, 0.3])# 添加第三个坐标轴(ax3),但这次指定 projection='polar' 来创建极坐标图
# 参数同样定义了位置和大小
ax3 = plt.axes([0.1, 0.1, 0.3, 0.3], projection='polar')# 添加第四个坐标轴(ax4),这里使用 projection='3d' 创建三维坐标系
# 参数也定义了其位置和大小
ax4 = plt.axes([0.5, 0.1, 0.3, 0.3], projection='3d')# 显示绘制好的图形窗口
plt.show()

绘制的图形如下图所示:

在这里插入图片描述


三、坐标轴的刻度

在 Matplotlib 中,坐标轴的刻度(ticks)是图表中非常重要的元素之一。它们不仅帮助我们理解数据的数值范围,还能通过适当的定位和格式化增强图表的可读性和美观性。

1. 坐标轴的刻度介绍

坐标轴的刻度由两部分组成:

  • 刻度定位器(Tick Locator):决定刻度的位置。
  • 刻度格式器(Tick Formatter):控制刻度标签如何显示。

通过自定义刻度定位器和格式器,可以实现对图表外观的高度定制,例如添加日期时间刻度、科学计数法表示的大数值等。

2. 刻度定位器和格式器

2.1 刻度定位器

刻度定位器决定了坐标轴上刻度的位置。Matplotlib 提供了多种内置的刻度定位器类,适用于不同的场景需求。

刻度定位器相关类及参数如下:

类名描述参数示例
MicrosecondLocator微秒级定位器,以微秒为单位定位刻度interval:微秒间隔ax.xaxis.set_major_locator(MicrosecondLocator(interval=100))
SecondLocator秒级定位器,以秒为单位定位刻度interval:秒间隔ax.xaxis.set_major_locator(SecondLocator(interval=30))
MinuteLocator分钟级定位器,以分钟为单位定位刻度interval:分钟间隔ax.xaxis.set_major_locator(MinuteLocator(interval=15))
HourLocator小时级定位器,以小时为单位定位刻度interval:小时间隔ax.xaxis.set_major_locator(HourLocator(interval=2))
DayLocator天级定位器,以每月的指定日期为单位定位刻度interval:天数间隔ax.xaxis.set_major_locator(DayLocator(interval=7))
WeekdayLocator工作日级定位器,以工作日为单位定位刻度byweekday:指定工作日(如MO, TU等)ax.xaxis.set_major_locator(WeekdayLocator(byweekday=MO))
MonthLocator月份级定位器,以月为单位定位刻度interval:月间隔ax.xaxis.set_major_locator(MonthLocator(interval=3))
YearLocator年份级定位器,以年为单位定位刻度base:年份基数,month:起始月,day:起始日ax.xaxis.set_major_locator(YearLocator(base=2, month=1, day=1))
AutoLocator自动定位器,自动计算刻度位置ax.xaxis.set_major_locator(AutoLocator())
MaxNLocator最大值定位器,根据指定的最大数量计算刻度位置nbins:最大刻度数,steps:允许的步长列表ax.xaxis.set_major_locator(MaxNLocator(nbins=5))
LinearLocator线性定位器,根据线性间隔的要求计算刻度的位置numticks:刻度数量ax.xaxis.set_major_locator(LinearLocator(numticks=6))
LogLocator对数定位器,根据对数间隔的要求计算刻度的位置base:对数底,subs:次要刻度倍数ax.xaxis.set_major_locator(LogLocator(base=10))
MultipleLocator多点定位器,根据指定的基数(相邻两个刻度的间距)计算刻度的位置base:刻度间隔ax.xaxis.set_major_locator(MultipleLocator(base=0.5))
FixedLocator定点定位器,将指定坐标列表直接设置为刻度位置,完全跳过自动刻度计算过程locs:刻度位置列表ax.xaxis.set_major_locator(FixedLocator(locs=[0, 1, 2, 3]))
IndexLocator索引定位器,根据指定的整数数量计算刻度的位置base:步长,offset:偏移量ax.xaxis.set_major_locator(IndexLocator(base=2, offset=1))
NullLocator空定位器,没有任何刻度ax.xaxis.set_major_locator(NullLocator())

2.2 刻度格式器

刻度格式器负责将刻度值转换为字符串显示。通过使用不同的格式器,可以灵活地调整刻度标签的显示格式。

刻度格式器相关类及参数如下:

类名描述参数示例
NullFormatter空格式器,不显示任何刻度标签-ax.xaxis.set_major_formatter(NullFormatter())
IndexFormatter索引格式器,用于显示离散化的序列刻度值seq(序列)ax.xaxis.set_major_formatter(IndexFormatter(seq=[0, 1, 2, 3]))
FixedFormatter固定格式器,用于显示固定列表中的刻度标签seq(字符串列表)ax.xaxis.set_major_formatter(FixedFormatter(seq=['A', 'B', 'C']))
FuncFormatter函数格式器,用于执行用户定义的函数以格式化刻度标签func(格式化函数)ax.xaxis.set_major_formatter(FuncFormatter(lambda x, pos: f'{x:.2f}'))
StrMethodFormatter字符串方法格式器,使用内置的Python字符串方法格式化刻度标签fmt(格式字符串)ax.xaxis.set_major_formatter(StrMethodFormatter('{x:.2f}'))
FormatStrFormatter格式字符串格式器,使用类似于格式化字符串等类型定义格式fmt(格式字符串)ax.xaxis.set_major_formatter(FormatStrFormatter('%.2f'))
ScalarFormatter标量格式器,用于显示数值型刻度值,比如100000以科学计数法表示1E6useOffset, useMathTextax.xaxis.set_major_formatter(ScalarFormatter(useMathText=True))
LogFormatter对数格式器,基于对数刻度值显示刻度标签-ax.xaxis.set_major_formatter(LogFormatter())
LogFormatterExponent对数刻度指数格式器,以指数表示形式显示刻度标签labelOnlyBaseax.xaxis.set_major_formatter(LogFormatterExponent(labelOnlyBase=False))
LogFormatterMathtext对数刻度数学符号格式器,使数学公式来显示刻度标签-ax.xaxis.set_major_formatter(LogFormatterMathtext())
LogFormatterSciNotation对数刻度科学符号格式器,使用科学符号来显示刻度标签-ax.xaxis.set_major_formatter(LogFormatterSciNotation())
PercentFormatter百分比格式器,用于将刻度值转换为百分比形式的刻度标签xmax(最大值),decimals(小数位数)ax.xaxis.set_major_formatter(PercentFormatter(xmax=100, decimals=1))
AutoDateFormatter日期自动格式器,用于自动识别并格式化轴上的日期刻度,默认的格式为’%Y-%m-%d’,即年-月-日tz(时区),defaultfmt(默认格式)ax.xaxis.set_major_formatter(AutoDateFormatter(tz=None, defaultfmt='%Y-%m-%d'))
ConciseDateFormatter简洁日期格式器,通常用于显示连续时间范围并使用日期偏移量格式化日期刻度locator(定位器)ax.xaxis.set_major_formatter(ConciseDateFormatter(locator=ax.xaxis.get_major_locator()))
DateFormatter日期格式器,用于手动指定坐标轴上的日期格式fmt(日期格式字符串)ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))

2.3 示例:刻度定位和格式

from datetime import datetime  # 导入datetime模块,用于处理日期和时间import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块,用于绘图
from matplotlib.dates import HourLocator, DateFormatter  # 导入HourLocator和DateFormatter类,用于设置坐标轴的时间格式# 定义一个字符串列表,包含一些表示日期时间的信息
dates = ['202310240', '2023102402', '2023102404', '2023102406', '2023102408']
# 将这些字符串转换为datetime对象列表,以便在图表中使用。格式为'%Y%m%d%H',即年月日小时
x_date = [datetime.strptime(d, '%Y%m%d%H') for d in dates]# y轴的数据列表
y_data = [1, 2, 3, 4, 5]# 在图形上创建一个新的坐标轴,位置和大小由矩形定义[left, bottom, width, height]
ax = plt.axes((0.2, 0.2, 0.6, 0.6))# 使用上述坐标轴绘制数据,x轴为日期时间,y轴为数值
ax.plot(x_date, y_data)# 创建一个HourLocator实例,用于每2小时显示一个刻度
hour_loc = HourLocator(interval=2)
# 设置x轴的主要刻度定位器为上面创建的hour_loc
ax.xaxis.set_major_locator(hour_loc)# 创建一个DateFormatter实例,用于格式化x轴上的日期时间为'%H:%M'格式(小时:分钟)
date_fmt = DateFormatter('%H:%M')
# 设置x轴的主要刻度格式化器为上面创建的date_fmt
ax.xaxis.set_major_formatter(date_fmt)# 显示绘制好的图形窗口
plt.show()

绘制的图形如下图所示:

在这里插入图片描述

3. 刻度样式

3.1 tick_params()方法介绍

tick_params() 方法在 Matplotlib 中用于更改刻度的样式和外观。通过此方法,可以控制刻度标记(ticks)、刻度标签(tick labels)以及刻度网格线(grid lines)的颜色、宽度、大小等属性。这使得对图表细节进行微调变得简单直接。

tick_params() 方法参数介绍:

参数类型说明
axisstr指定要设置哪个轴上的刻度参数。可选值有 'x', 'y', 和 'both'(默认)。
whichstr设置哪些刻度被影响。选项包括 'major', 'minor', 'both'(默认)。
directionstr刻度方向。选项包括 'in', 'out', 'inout'(默认是 'out')。
lengthfloat刻度线的长度(以点为单位)。
widthfloat刻度线的宽度(以点为单位)。
colorcolor刻度线的颜色。可以是任何 Matplotlib 支持的颜色格式。
padfloat刻度标签与刻度线之间的距离(以点为单位)。
labelsizefloat/str刻度标签字体大小。也可以是相对大小如 'smaller', 'x-large' 等。
labelcolorcolor刻度标签颜色。
colorscolor一次性设置刻度线、刻度标签颜色等所有支持颜色的属性。
bottombool如果为 True,则绘制位于轴底部的刻度。
topbool如果为 True,则绘制位于轴顶部的刻度。
leftbool如果为 True,则绘制位于轴左侧的刻度。
rightbool如果为 True,则绘制位于轴右侧的刻度。
labelbottombool控制是否显示 x 轴底部的刻度标签。
labeltopbool控制是否显示 x 轴顶部的刻度标签。
labelleftbool控制是否显示 y 轴左侧的刻度标签。
labelrightbool控制是否显示 y 轴右侧的刻度标签。

3.2 示例:刻度样式

import matplotlib.pyplot as plt
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块用于绘图# 创建一个新的坐标轴对象
ax = plt.axes()# 使用tick_params()方法修改刻度样式:
# axis='both' 表示同时应用到x轴和y轴;
# which='major' 表示这些参数将应用于主刻度(也可以是'minor'或'both');
# labelsize=10 设置刻度标签的字体大小为10;
# colors='r' 将刻度的颜色设置为红色('r'代表red);
# direction='in' 设置刻度线的方向向内;
# length=6 设置刻度线的长度为6点;
# width=2 设置刻度线的宽度为2点。
ax.tick_params(axis='both', which='major', labelsize=10, colors='r', direction='in', length=6, width=2)# 再次使用tick_params()方法对x轴单独进行样式修改:
# axis='x' 表示只应用于x轴;
# colors='b' 将x轴刻度颜色设置为蓝色('b'代表blue);
# pad=10 设置刻度标签与刻度线之间的间距为10点,增加了一些空间。
ax.tick_params(axis='x', colors='b', pad=10)# 显示所创建的图形窗口
plt.show()

绘制的图形如下图所示:

在这里插入图片描述

4. 示例:某地区24小时的平均风速

数据如下图所示,需要根据这个数据绘制图形。

在这里插入图片描述

实现代码如下所示:

# 导入 datetime 模块,用于处理时间数据
from datetime import datetime# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt
# 导入 pandas 模块,用于读取和处理 CSV 数据
import pandas as pd
# 从 matplotlib.dates 导入 DateFormatter 和 HourLocator
# 用于格式化时间轴的显示方式(如小时、分钟)和设置刻度间隔
from matplotlib.dates import DateFormatter, HourLocator# 设置中文字体为 SimHei(黑体),以确保中文可以正常显示在图表上
# 否则中文可能显示为方框或乱码
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决坐标轴负号 '-' 显示为方块的问题
# 某些中文字体不支持 Unicode 负号,设置为 False 可正常显示负数
plt.rcParams['axes.unicode_minus'] = False# 定义 CSV 文件的路径,请根据实际文件位置修改
csv_file_path = './data/某地区24小时的平均风速.csv'# 使用 pandas 读取 CSV 文件,返回一个 DataFrame(表格型数据结构)
df = pd.read_csv(csv_file_path)# 1. 创建画布(Figure),用于承载图表内容
# 不指定大小时使用默认尺寸
fig = plt.figure()# 2. 在画布上添加一个自定义位置的绘图区域(Axes)
# 参数 [left, bottom, width, height] 是相对于画布的比例(0~1)
# 这里设置为从左下角 (0.1, 0.1) 开始,宽 0.8、高 0.8,留出边距
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])# 将 '时间' 列的数据(如 2023102401)转换为 datetime 对象
# 使用 apply 和 lambda 函数逐行处理字符串,并按 '%Y%m%d%H' 格式解析为日期时间
x_date = df['时间'].apply(lambda x: datetime.strptime(str(x), '%Y%m%d%H')).tolist()# 提取 '风速 (km/h)' 列的数据并转换为 Python 列表
y_data = df['风速 (km/h)'].tolist()# 绘制折线图
# x: 时间数据,y: 风速数据
# ls='-':线条样式为实线
# marker='>':数据点使用右向三角形作为标记
# ms=6:标记大小为 6
# mfc='#FF9900':标记填充颜色为橙色(十六进制颜色)
ax.plot(x_date, y_data, ls='-', marker='>', ms=6, mfc='#FF9900')# 设置图表标题
ax.set_title('深圳市24小时的平均风速')# 设置 Y 轴标签
ax.set_ylabel('平均风速(km/h)')# 设置 Y 轴的显示范围为 5 到 25 km/h
# 突出风速变化,避免图形压缩或拉伸
ax.set_ylim(5, 25)# 在每个数据点上方添加数值标签
# 使用 text() 方法在每个 (x, y) 点绘制文本
# s=y_data[i]:显示当前风速值
# ha='center':水平居中对齐于数据点
# va='bottom':垂直方向在数据点下方显示(避免遮挡)
for i in range(len(y_data)):ax.text(x=x_date[i], y=y_data[i], s=y_data[i], ha='center', va='bottom')# 设置 X 轴主刻度为每 2 小时一个
hour_loc = HourLocator(interval=2)
ax.xaxis.set_major_locator(hour_loc)# 设置 X 轴主刻度标签的显示格式为 "小时:分钟"(如 08:00)
date_fmt = DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(date_fmt)# 设置所有坐标轴的刻度样式
# direction='in':刻度线向内
# length=6:刻度线长度
# width=2:刻度线粗细
# labelsize=12:刻度标签字体大小
ax.tick_params(direction='in', length=6, width=2, labelsize=12)# 单独设置 X 轴刻度标签旋转 45 度
# 防止时间标签过长导致重叠,提升可读性
ax.tick_params(axis='x', labelrotation=45)# 显示绘制完成的图表
plt.show()

绘制的图形如下图所示:

在这里插入图片描述


四、轴脊(Spines)

1. 轴脊介绍

在 Matplotlib 中,轴脊(Spines) 是指坐标轴的边界线,它们定义了绘图区域的框架。每个坐标轴(Axes)默认有四条轴脊:

  • left:左侧轴脊
  • right:右侧轴脊
  • top:顶部轴脊
  • bottom:底部轴脊

轴脊不仅用于显示坐标轴的边界,还可以控制刻度和标签的位置。通过自定义轴脊,可以实现多种视觉效果,例如:

  • 隐藏某些边框以获得更简洁的图表;
  • 将轴脊移动到数据原点(如绘制笛卡尔坐标系);
  • 改变轴脊的颜色、线宽或样式。

轴脊对象可通过 ax.spines 字典访问,例如 ax.spines['left'] 表示左侧轴脊。

2. 隐藏轴脊

2.1 通过 axis() 方法

plt.axis()ax.axis() 方法不仅可以设置坐标轴的范围,还可以控制坐标轴的整体显示状态,包括是否显示边框(轴脊)。

axis() 方法的参数取值说明:

参数值类型描述
'on'str恢复显示所有坐标轴元素(默认状态),包括轴脊、刻度、标签等。
'off'str隐藏所有坐标轴元素,包括轴脊、刻度、标签、标题等。整个坐标轴区域变为空白。
'equal'str设置等比例坐标轴(x 和 y 单位长度相等),不改变可见性。
'scaled'str类似 'equal',但通过调整绘图区域大小实现。
'tight'str自动调整坐标轴范围以紧密包围数据。

2.2 通过 set_visible() 方法

更精细的控制方式是直接操作 spines 对象的 set_visible() 方法,可以单独隐藏某一条轴脊,而保留其他部分(如刻度、标签)可见。

方法签名

ax.spines[spine_name].set_visible(False)

set_visible() 方法参数

参数类型默认值描述
bbool如果为 False,则隐藏该轴脊;如果为 True,则显示该轴脊。

🔹 spine_name 可选值:'left', 'right', 'top', 'bottom'

2.3 示例:绘制多边形(隐藏轴脊)

import matplotlib.pyplot as plt  # 导入 matplotlib 的 pyplot 模块,用于绘制图形# 设置绘图时使用的字体为 SimHei(黑体),解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号(-),因为默认情况下使用某些中文字体可能无法正常显示负号
plt.rcParams['axes.unicode_minus'] = False# 多边形顶点 x 坐标列表
x = [0, 2, 4, 3]
# 多边形顶点 y 坐标列表
y = [1, 3, 2, 0]# 使用 fill() 方法填充多边形区域
plt.fill(x, y,  # 指定多边形各顶点的坐标facecolor='lightgreen',  # 填充颜色为浅绿色alpha=0.5,  # 透明度设置为 0.5,值在 0 至 1 之间,0 为完全透明,1 为不透明edgecolor='green',  # 边缘线条颜色设为绿色linewidth=2,  # 边缘线条宽度设为 2linestyle='--',  # 边缘线条样式设为虚线label='多边形填充'  # 图例标签名
)# 设置 x 轴的数值范围
plt.xlim(-1, 5)
# 设置 y 轴的数值范围
plt.ylim(-1, 4)# 添加图例,展示图表中的标记信息
plt.legend()# 设置图表标题
plt.title('fill() 填充多边形示例')# 关闭轴脊
plt.axis('off')# 获取当前的坐标轴对象(Axes)
# plt.gca() 是 "get current axes" 的缩写
# 它返回当前正在操作的子图坐标轴,如果没有则创建一个
# ax = plt.gca()# 隐藏图表底部的边框线
# 注意:这也会隐藏 x 轴的横线,但刻度和标签仍可单独控制显示
# ax.spines['top'].set_visible(False)# 隐藏图表左侧的边框线
# 同样,这会隐藏 y 轴的竖线,但不影响刻度和标签
# ax.spines['right'].set_visible(False)# 显示绘制出的图表
plt.show()

绘制的图形如下图所示:

在这里插入图片描述

在这里插入图片描述

2.4 示例:2018年到2022年的快递业务量及其增长速度

数据如下图所示,需要根据这个数据绘制图形。

在这里插入图片描述

实现代码如下所示:

# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 导入 pandas 模块,用于读取和处理 CSV 数据
import pandas as pd# 设置绘图时使用的字体为 SimHei(黑体),解决中文无法正常显示的问题
# 否则中文标签、标题等可能显示为方框或乱码
plt.rcParams['font.sans-serif'] = ['SimHei']# 正常显示负号(-)
# 某些中文字体不支持 Unicode 负号,会导致负数显示为方块
# 设置为 False 可确保负号正常显示
plt.rcParams['axes.unicode_minus'] = False# 定义 CSV 文件的路径,请根据实际路径修改
csv_file_path = './data/2018年到2022年的快递业务量及其增长速度.csv'# 使用 pandas 读取指定路径的 CSV 文件,返回一个 DataFrame(二维表格结构)
df = pd.read_csv(csv_file_path)# 创建一个新的图形(Figure)对象,用于承载图表内容
fig = plt.figure()# 在图形上添加一个自定义位置的坐标轴(Axes)
# 参数 [left, bottom, width, height] 表示相对于画布的比例(0~1)
# 这里设置为从 (0.1, 0.1) 开始,宽 0.8、高 0.8,留出边距
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])# 从 DataFrame 中提取 '年份' 列,并转换为 Python 列表作为 X 轴数据
x_year = df['年份'].tolist()# 提取 '快递业务量 (亿件)' 列数据,作为柱状图的 Y 轴数据
y_nums = df['快递业务量 (亿件)'].tolist()# 提取 '增长速度 (%)' 列数据,作为折线图的 Y 轴数据
y_rate = df['增长速度 (%)'].tolist()# 绘制柱状图:显示每年的快递业务量
# x_year: X 轴(年份),y_nums: 柱子高度
# width=0.5: 柱子宽度
# color='lightblue': 柱子颜色为浅蓝色
rect_nums = ax.bar(x_year, y_nums, width=0.5, color='lightblue')# 设置主坐标轴(ax)的图表标题
ax.set_title('2018-2022年的快递业务量及其增长速度')# 设置主坐标轴 Y 轴的标签
ax.set_ylabel('业务量(亿件)')# 设置主坐标轴 Y 轴的显示范围为 0 到 1400 亿件
# 保证图形空间合理,避免压缩或拉伸
ax.set_ylim(0, 1400)# 在每个柱子的顶部添加数值标签
# 使用 text() 方法逐个标注数据
for i in range(len(y_nums)):ax.text(x=x_year[i],  # X 位置:对应年份y=y_nums[i],  # Y 位置:柱子顶部s=y_nums[i],  # 显示内容:业务量数值fontsize=11,  # 字体大小ha='center',  # 水平居中对齐于柱子va='bottom'  # 垂直方向在柱子上方显示)# 创建一个与 ax 共享 X 轴的右侧坐标轴(用于绘制增长速度)
ax_right = ax.twinx()# 绘制折线图:显示每年的增长速度
# x_year: X 轴(年份),y_rate: Y 轴(增长率)
# color='lightcoral': 线条颜色为浅珊瑚色
# marker='o': 数据点用圆形标记
# ms=6: 标记大小为 6
# mfc='white': 标记内部填充为白色
line_rate = ax_right.plot(x_year, y_rate, color='lightcoral', marker='o', ms=6, mfc='white')# 设置右侧坐标轴 Y 轴的标签
ax_right.set_ylabel('增长速度(%)')# 设置右侧坐标轴 Y 轴的显示范围为 0 到 100%
ax_right.set_ylim(0, 100)# 在每个折线数据点上方添加增长率数值标签
for i in range(len(y_rate)):ax_right.text(x=x_year[i],  # X 位置:对应年份y=y_rate[i],  # Y 位置:数据点位置s=y_rate[i],  # 显示内容:增长率数值fontsize=11,  # 字体大小ha='center',  # 水平居中对齐va='bottom'  # 垂直方向在点上方显示)# 手动创建图例,合并柱状图和折线图的图例项
# [rect_nums, line_rate[0]]: 分别是柱状图对象和折线图中的 Line2D 对象
# labels: 图例文字
# loc='upper left': 图例放在左上角
# ncol=2: 设置图例为 2 列(但这里写成了 26.6,可能是笔误)
plt.legend([rect_nums, line_rate[0]], ['快递业务量', '比去年增长'], loc='upper left', ncol=2)# 隐藏主坐标轴(ax)顶部的边框线,使图表更简洁
ax.spines['top'].set_visible(False)# 隐藏右侧坐标轴(ax_right)顶部的边框线,保持风格统一
ax_right.spines['top'].set_visible(False)# 显示最终绘制的图表
plt.show()

绘制的图形如下图所示:

在这里插入图片描述

3. 移动轴脊

在 Matplotlib 中,通过移动轴脊(Spines)的位置,可以创建更灵活、更具表现力的图表样式。例如,将坐标轴置于图形中心,模拟数学中的笛卡尔坐标系,或实现类似于 R 语言 ggplot2 风格的“下方-左侧”坐标轴布局。

3.1 通过 set_position() 方法

set_position()Spine 对象的一个方法,用于设置轴脊的位置。它可以将某条轴脊从默认边缘位置移动到指定坐标或相对位置。

方法签名

ax.spines[spine_name].set_position(position)

set_position() 方法参数取值说明:

位置类型(position)参数格式描述示例
'outward'(orientation, amount)将轴脊向外偏移指定距离(单位:点)。负值表示向内。('outward', 10)
'axes'(orientation, 0~1)相对于轴的归一化位置(0 到 1)。0 表示起点,1 表示终点。('axes', 0.5) 表示移动到轴的中间
'data'(orientation, value)移动到数据空间中的某个具体数值位置。常用于将轴脊置于原点。('data', 0)
'center'简写形式等价于 'data' 类型中的 (orientation, 0),即将轴脊置于数据为 0 的位置。'center'
'zero'简写形式'center',语义更明确,表示移动到数据零点。'zero'

🔹 orientation 可选值:

  • 对于 left/right 轴脊:使用 'y'
  • 对于 bottom/top 轴脊:使用 'x'

3.2 示例:绘制多边形(移动轴脊)

import matplotlib.pyplot as plt  # 导入 matplotlib 的 pyplot 模块,用于绘制图形# 设置绘图时使用的字体为 SimHei(黑体),解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号(-),因为默认情况下使用某些中文字体可能无法正常显示负号
plt.rcParams['axes.unicode_minus'] = False# 多边形顶点 x 坐标列表
x = [0, 2, 4, 3]
# 多边形顶点 y 坐标列表
y = [1, 3, 2, 0]# 使用 fill() 方法填充多边形区域
plt.fill(x, y,  # 指定多边形各顶点的坐标facecolor='lightgreen',  # 填充颜色为浅绿色alpha=0.5,  # 透明度设置为 0.5,值在 0 至 1 之间,0 为完全透明,1 为不透明edgecolor='green',  # 边缘线条颜色设为绿色linewidth=2,  # 边缘线条宽度设为 2linestyle='--',  # 边缘线条样式设为虚线label='多边形填充'  # 图例标签名
)# 设置 x 轴的数值范围
plt.xlim(-1, 5)
# 设置 y 轴的数值范围
plt.ylim(-1, 4)# 添加图例,展示图表中的标记信息
plt.legend()# 设置图表标题
plt.title('fill() 填充多边形示例')# 获取当前的坐标轴对象(Axes)
# plt.gca() 是 "get current axes" 的缩写
# 它返回当前正在操作的子图坐标轴,如果没有则创建一个
ax = plt.gca()# 隐藏图表底部的边框线
# 注意:这也会隐藏 x 轴的横线,但刻度和标签仍可单独控制显示
ax.spines['top'].set_visible(False)# 隐藏图表左侧的边框线
# 同样,这会隐藏 y 轴的竖线,但不影响刻度和标签
ax.spines['right'].set_visible(False)# 将左侧(Y轴)边框线(spine)移动到图形的水平中心位置
# ('axes', 0.5) 表示位置是相对于整个坐标轴宽度的 50% 处
# 即:Y轴将显示在图形中间(常用于对称数据或坐标原点居中)
ax.spines['left'].set_position(('axes', 0.5))# 将底部(X轴)边框线(spine)移动到图形的垂直中心位置
# ('axes', 0.5) 表示位置是相对于整个坐标轴高度的 50% 处
# 即:X轴将显示在图形中间,与上面的Y轴一起形成十字交叉坐标系
ax.spines['bottom'].set_position(('axes', 0.5))# 将左侧(Y轴)边框线重新定位到数据值为 3 的位置
# ('data', 3) 表示 Y轴 将移动到 X=3 的垂直线上
# 注意:这行会覆盖上面第一行的设置(一个 spine 不能同时有两个位置)
# 通常用于将坐标轴移动到某个特定的数据点上
# ax.spines['left'].set_position(('data', 3))# 显示绘制出的图表
plt.show()

绘制的图形如下图所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92138.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92138.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92138.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【物联网】基于树莓派的物联网开发【22】——树莓派获取传感器数据实时存储实战

场景介绍 今天程序猫带领大家如何实时获取树莓派传感器温湿度数据,并自动存储到数据库中。确保数据的持续性。 实现过程 硬件连接 树莓派4b连接GPIO引脚与DHT11传感器; 硬件只涉及树莓派、DHT11传感器。 DHT11的信号引脚连接树莓派的GPIO17, DHT11的Vdd&…

Linux DNS缓存与Nginx DNS缓存运维文档

一、Linux DNS缓存机制与配置 1. Linux DNS缓存原理 Linux系统中的DNS缓存主要通过以下几种方式实现: ​** nscd(Name Service Caching Daemon)**​:系统级缓存服务,可缓存DNS解析、主机名解析等信息​dnsmasq​:轻量级DNS转发器和…

Java开发时出现的问题---并发与资源管理深层问题

Java 并发模型基于 JVM 内存模型(JMM),资源管理涉及 IO、线程、锁等关键组件。若对并发语义、资源生命周期理解不透彻,易引发死锁、内存泄漏、数据错乱等严重问题。1. 并发三大特性(可见性、原子性、有序性&#xff09…

从「同步」到「异步」:用 aiohttp 把 Python 网络 I/O 榨到极致

目录 一、写在前面:为什么 IO 是瓶颈 二、同步模型:requests 的忧伤 三、线程池:用并发掩盖阻塞 四、aiohttp:让「等待」非阻塞 4.1 安装与版本约定 4.2 异步客户端:asyncio aiohttp 4.3 错误处理与超时 4.4 …

MySQL 在麒麟系统上部署使用 + DBeaver 远程连接 + SQL 数据导入完整流程

🚀 MySQL 在麒麟系统上部署使用 DBeaver 远程连接 SQL 数据导入完整流程适用于国产操作系统(如:麒麟 / 统信 / Ubuntu)和 MySQL 8.0。包含远程配置、授权连接、SQL 导入、DBeaver连接配置等常见问题解决方案。📦 环境…

C语言-指针初级(指针定义、指针的作用、指针的计算、野指针、悬空指针、void类型指针)

本章概述思维导图:C语言指针指针是C语言中最强大但也最容易混淆的特性之一。它提供了直接操作内存地址的能力,使得C语言具有高效性和灵活性。下面我将详细介绍C语言指针的各个方面。指针定义指针的本质:指针是一个变量,其值为另一…

具身智能VLA困于“数据泥潭”,人类活动视频数据是否是“破局之钥”?

前言尽管当前的视觉-语言-动作(VLA)模型已展现出显著进展,但其在新场景和与复杂物体交互中的性能会显著下降,在遵循指令方面落后于像LLaVA 这样的大型多模态模型(LMM)。这种局限性源于现有VLA模型对存在固有…

CIO如何规划企业BI分析指标体系 —— 从经营出发到绩效管理

如果你是一家企业的CIO,要启动一个商业智能BI项目,负责规划整个项目的商业智能BI分析内容,你该如何入手准备?要有什么样的思路。如果是管理层、老板还不能清晰认识到商业智能BI的价值,也提不出很清晰的需求&#xff0c…

go学习笔记:panic是什么含义

anic 是 Go 语言中的一种运行时错误处理机制,用于处理程序中的异常情况。 基本含义 panic 会: 立即停止当前函数的执行 开始执行 defer 函数(如果有的话) 向上传播到调用栈,逐层执行 defer 如果到达 main 函数&am…

OpenLayers 入门指南【五】:Map 容器

文章目录 一、Map 对象核心参数 1. target 2. view 3. layers 4. controls 5. interactions 6. 其他重要参数 二、Map 对象常用方法 1. 图层管理 2. 控件管理 3. 交互管理 4. 视图与坐标操作 5. 事件监听 6. 覆盖物管理 7. 其他 三、总结 上一章节中我们通过修改OlMap.vue组件已…

关税战火中的技术方舟:新西兰证券交易所的破局之道 ——从15%关税冲击到跨塔斯曼结算联盟,解码下一代交易基础设施

一、今日焦点:全球关税震荡与新西兰的“技术自卫” 1. 特朗普关税大限落地,新西兰启动紧急游说 2025年8月1日,美国总统特朗普正式签署行政令,对贸易顺差国征收最低15%基准关税。新西兰贸易部长紧急声明:“将提出有力证…

windows内核研究(软件调试-软件断点)

软件调试软件断点调试的本质是什么?就是在被调试程序中触发异常,然后被调试程序就会向_DEBUG_OBJECT结构体添加调试事件,这里我们调试器就接管这个异常了(调试的过程就是异常处理的过程) 软件断点 在x64dbg中通过快捷键…

HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例

🌟 鸿蒙应用开发常用三方库指南(2025 最新版)适用版本:HarmonyOS NEXT / API 12 参考来源:HarmonyOS 三方库中心 截止至 2025 年 8 月 1 日,本文整理了当前社区中下载量高、稳定性强、生态完善的热门三方库…

【通识】C Sharp

1. 使用 \p{名称}构造匹配Unicode常规类别(该示例为Pd或“标点、短划线”类别)和命名块(IsGreek和IsBsicLatin命名块) using System; using system.Text.RegularExpressions; public class Example {public static void main() {s…

国内首个开源SCA社区——OpenSCA开源社区

OpenSCA开源社区成果说明项目背景智能时代,软件定义一切。随着开发模式的敏捷化转型,开源代码在软件制品中的占比越来越大,开源软件已然成为软件供应链的重要组成部分。由于其特殊性,开源代码的引入增加了软件应用的风险面&#x…

超聚变:智能体时代,AI原生重构城企数智化基因

2025 世界人工智能大会(WAIC)世博展览馆内,超聚变展台前人头攒动,其展示的AI落地全栈解决方案及上百个AI应用场景吸引了众多参观者驻足观看。这是今年WAIC大会火爆的一角,更是当下AI应用爆发的一个缩影。当人工智能发展…

Traccar:开源GPS追踪系统的核心价值与技术全景

Traccar:开源GPS追踪系统的核心价值与技术全景 —— 从设备兼容到企业级定位管理的开源实践 一、项目定位:多场景定位管理的开源基石 Traccar是一个高扩展性的开源GPS追踪平台,支持全球超过200种通信协议与2000款GPS设备(包括车…

编程与数学 03-002 计算机网络 20_计算机网络课程实验与实践

编程与数学 03-002 计算机网络 20_计算机网络课程实验与实践一、实验环境搭建(一)使用模拟器(如Cisco Packet Tracer)搭建网络实验环境(二)实验设备的配置与连接二、基础网络实验(一&#xff09…

15个命令上手Linux!

1、id,显示当前登录系统的用户信息2、pwd,显示当前工作目录的绝对路径3、ls,显示当前目录下的内容(ls -r:按反向顺序列出内容,ls -l:以详细列表形式显示)4、cd,切换工作目…

MongoDB分片技术实现

MongoDB分片技术实现概述MongoDB分片(Sharding)是MongoDB的水平扩展解决方案,通过将数据分布到多个分片(shard)上来处理大数据量和高吞吐量的需求。MongoDB分片架构1. 分片集群组件# MongoDB分片集群架构 version: 3.8…