0

0

Matplotlib教程:在绝对坐标绘图中使用自定义相对轴刻度标签

DDD

DDD

发布时间:2025-10-18 15:18:02

|

714人浏览过

|

来源于php中文网

原创

Matplotlib教程:在绝对坐标绘图中使用自定义相对轴刻度标签

本教程旨在解决matplotlib中一个常见的绘图需求:当数据点基于绝对物理坐标(如毫米)绘制时,如何将轴刻度标签替换为更具业务意义的相对标识符(如网格的列/行号)。我们将详细介绍如何利用ax.set_xticks()、ax.set_yticks()、ax.set_xticklabels()和ax.set_yticklabels()函数,在不改变数据点实际位置的前提下,实现轴刻度位置与标签内容的分离,从而提高图表的专业性和可读性。

引言:坐标与标签的灵活需求

在许多工程和制造领域,数据通常以精确的绝对物理坐标(例如,部件上的X、Y毫米位置)进行测量和记录。然而,在进行可视化时,直接显示这些绝对坐标作为轴刻度可能并不直观。用户,特别是现场操作人员,可能更习惯于使用相对的、逻辑性的标识符来定位,例如“第1列,第2行”。

Matplotlib默认的轴刻度行为是将数据点的坐标直接用作刻度位置和标签。这在大多数情况下是合理的,但当我们需要将绝对位置与相对标识符结合时,就需要更精细的控制。本教程将展示如何通过Matplotlib的轴对象方法,实现绘图数据的绝对定位与轴刻度标签的相对自定义,从而创建既精确又易于理解的图表。

核心概念:分离刻度位置与标签内容

Matplotlib通过Axes对象提供了一系列强大的方法来控制轴的各个方面。要实现绝对坐标绘图与相对刻度标签的结合,我们主要依赖以下四个关键函数:

  1. ax.set_xticks(locs) / ax.set_yticks(locs):

    • 这两个函数用于设置轴上刻度线的位置。locs是一个数值列表,指定了刻度线在数据坐标系中的具体位置。例如,ax.set_xticks([-160.1, -110.1]) 将会在X轴的-160.1和-110.1位置绘制刻度线。这些位置是基于您实际绘图所使用的绝对数据坐标。
  2. ax.set_xticklabels(labels) / ax.set_yticklabels(labels):

    • 这两个函数用于设置对应刻度线的文本标签。labels是一个字符串列表,其中的每个字符串将作为对应位置刻度线的标签。重要的是,labels列表的长度和顺序必须与locs列表(即通过set_xticks/set_yticks设置的刻度位置)严格匹配。例如,如果您在X轴设置了两个刻度位置,那么set_xticklabels也需要提供两个标签。

通过这种方式,我们首先告诉Matplotlib“在哪里”放置刻度线(使用绝对坐标),然后告诉它“显示什么”作为这些刻度线的标签(使用相对标识符)。

实现步骤

我们将通过一个具体的例子来演示如何实现这一功能。假设我们有一个包含部件引脚信息的数据集,其中包含引脚的唯一ID、绝对X/Y坐标以及相对的列/行号。

1. 数据准备

首先,我们需要准备数据。在这个例子中,数据被组织成一个Pandas DataFrame,包含了引脚ID、绝对X/Y坐标以及对应的相对列/行号。

import pandas as pd
from matplotlib import pyplot as plt

# 模拟数据
ID =  ['C1;R2', 'C2;R2', 'C1;R1', 'C2;R1'] # 引脚标识符
X = [-160.1, -110.1, -160.1, -110.1]     # 绝对X坐标 (毫米)
Y = [974.9, 974.9, 924.9, 924.9]         # 绝对Y坐标 (毫米)
COLUMN = ['1', '2', '1', '2']            # 相对列号
ROW = ['2', '2', '1', '1']               # 相对行号

# 合并列表并创建DataFrame
list_of_tuples = list(zip(ID, X, Y, COLUMN, ROW))
Data = pd.DataFrame(list_of_tuples, columns=['ID', 'X', 'Y', 'COLUMN', 'ROW'])

print("DataFrame内容:")
print(Data)

DataFrame内容如下:

      ID      X      Y COLUMN ROW
0  C1;R2 -160.1  974.9      1   2
1  C2;R2 -110.1  974.9      2   2
2  C1;R1 -160.1  924.9      1   1
3  C2;R1 -110.1  924.9      2   1

2. 初始绘图

使用绝对X和Y坐标绘制散点图。

fig, ax = plt.subplots()
ax.scatter(Data['X'], Data['Y'])

# 标注点ID
Data[['X','Y','ID']].apply(lambda row: ax.text(row['X'], row['Y'], row['ID'], ha='center', va='bottom'), axis=1)

# 设置图表标题
ax.set_title("参考图", size=18)

此时,X轴和Y轴的刻度将显示为绝对的X和Y坐标值。

3. 自定义轴刻度位置与标签

这是实现核心功能的步骤。我们将根据数据中的绝对坐标和对应的相对列/行号来设置刻度。

CodeBuddy
CodeBuddy

腾讯云AI代码助手

下载
  • 确定刻度位置 (绝对坐标): 从数据中可以看到,X轴的刻度应该位于 -160.1 和 -110.1。Y轴的刻度应该位于 924.9 和 974.9。
  • 确定刻度标签 (相对标识符): 对于X轴,对应的相对列号是 1 和 2。对于Y轴,对应的相对行号是 1 和 2。

将这些信息应用到 set_xticks/set_yticks 和 set_xticklabels/set_yticklabels。同时,为了图表的整体一致性,我们将轴的标签也更新为“COLUMN”和“ROW”。

# 定义自定义刻度位置 (使用绝对坐标)
ax.set_xticks([-160.1, -110.1]) # X轴刻度位于这些绝对X坐标
ax.set_yticks([924.9, 974.9])   # Y轴刻度位于这些绝对Y坐标

# 创建自定义轴刻度标签 (使用相对标识符)
xlabels = ['1', '2'] # X轴刻度标签为相对列号
ylabels = ['1', '2'] # Y轴刻度标签为相对行号

# 将新标签应用到自定义刻度位置
ax.set_xticklabels(xlabels)
ax.set_yticklabels(ylabels)

# 更新轴标签以反映新的含义
plt.xlabel('COLUMN')
plt.ylabel('ROW')

4. 完整示例代码

结合以上所有步骤,完整的代码如下:

import pandas as pd
from matplotlib import pyplot as plt

# Setup Lists
ID =  ['C1;R2', 'C2;R2', 'C1;R1', 'C2;R1'] # Pin identifier
X = [-160.1, -110.1, -160.1, -110.1]     # Absolute X positions (mm)
Y = [974.9, 974.9, 924.9, 924.9]         # Absolute Y positions (mm)
COLUMN = ['1', '2', '1', '2']            # Relative X (Column)
ROW = ['2', '2', '1', '1']               # Relative Y (Row)

# Merge Lists
list_of_tuples = list(zip(ID, X, Y, COLUMN, ROW))

# Convert lists to dataframe
Data = pd.DataFrame(list_of_tuples,
                  columns=['ID', 'X', 'Y', 'COLUMN', 'ROW'])

# Plot points
fig, ax = plt.subplots()

ax.scatter(Data['X'], Data['Y'])

# Label Axis (updated to reflect relative meanings)
plt.xlabel('COLUMN')
plt.ylabel('ROW')

# Set Title
ax.set_title("Reference Plot", size=18)

# Label Points with IDs
Data[['X','Y','ID']].apply(lambda row: ax.text(row['X'], row['Y'], row['ID'], ha='center', va='bottom'),axis=1)

# Define custom tick locations (using absolute coordinates)
ax.set_xticks([-160.1, -110.1]) # X ticks at these blueprint coordinates
ax.set_yticks([924.9, 974.9])   # Y ticks at these blueprint coordinates

# Create custom axis tick labels (using relative identifiers)
xlabels = ['1', '2'] # Give x-ticks relative column number names
ylabels = ['1', '2'] # Give y-ticks relative row number names

# Apply new labels to custom tick locations
ax.set_xticklabels(xlabels)
ax.set_yticklabels(ylabels)

# Display the plot
plt.show()

运行这段代码后,您将看到一个散点图,其中数据点仍然精确地位于其绝对X/Y坐标上,但X轴和Y轴的刻度标签分别显示为“1”、“2”,代表列和行,极大地提升了图表的业务可读性。

注意事项与最佳实践

  1. 刻度位置与标签的对应关系: 务必确保 set_xticks/set_yticks 中提供的刻度位置数量与 set_xticklabels/set_yticklabels 中提供的标签数量一致,并且顺序要一一对应。如果数量不匹配,Matplotlib会报错或产生非预期的结果。

  2. 动态生成刻度: 在实际应用中,如果部件的引脚数量或布局是可变的,不应硬编码刻度位置和标签。您可以从DataFrame中动态提取唯一的X/Y坐标作为刻度位置,并提取对应的唯一列/行号作为标签。

    例如,要动态获取X轴的刻度位置和标签:

    unique_x_coords = Data['X'].unique()
    unique_columns = Data['COLUMN'].unique()
    # 确保排序一致,以便标签与位置正确对应
    sorted_indices_x = unique_x_coords.argsort()
    sorted_x_coords = unique_x_coords[sorted_indices_x]
    sorted_x_labels = unique_columns[sorted_indices_x]
    
    ax.set_xticks(sorted_x_coords)
    ax.set_xticklabels(sorted_x_labels)

    对Y轴执行类似操作。

  3. 轴标签的更新: 当刻度标签代表的含义发生变化时,不要忘记更新 plt.xlabel() 和 plt.ylabel(),使其与新的刻度标签含义保持一致,避免混淆。

  4. 可读性与用户体验: 这种方法特别适用于需要将精确技术数据转化为用户友好界面的场景。通过将原始的、可能难以理解的坐标转换为业务逻辑标识符,可以显著提升图表的可读性和实用性。

总结

Matplotlib通过其灵活的API,允许开发者对图表的每一个细节进行精细控制。ax.set_xticks()、ax.set_yticks()、ax.set_xticklabels()和ax.set_yticklabels()的组合使用,提供了一种强大的机制,使得我们能够在绘图数据使用绝对坐标的同时,为轴刻度提供自定义的、更具业务意义的相对标签。掌握这一技巧,将使您能够创建出既专业又易于理解的复杂数据可视化图表。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

61

2025.12.04

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

287

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

258

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

124

2025.08.07

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

14

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Rust 教程
Rust 教程

共28课时 | 5万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号