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

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

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

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

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

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

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

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

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

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

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 pdfrom 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']               # 相对行号# 合并列表并创建DataFramelist_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 ROW0  C1;R2 -160.1  974.9      1   21  C2;R2 -110.1  974.9      2   22  C1;R1 -160.1  924.9      1   13  C2;R1 -110.1  924.9      2   1

2. 初始绘图

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

fig, ax = plt.subplots()ax.scatter(Data['X'], Data['Y'])# 标注点IDData[['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. 自定义轴刻度位置与标签

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

确定刻度位置 (绝对坐标):从数据中可以看到,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 pdfrom matplotlib import pyplot as plt# Setup ListsID =  ['C1;R2', 'C2;R2', 'C1;R1', 'C2;R1'] # Pin identifierX = [-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 Listslist_of_tuples = list(zip(ID, X, Y, COLUMN, ROW))# Convert lists to dataframeData = pd.DataFrame(list_of_tuples,                  columns=['ID', 'X', 'Y', 'COLUMN', 'ROW'])# Plot pointsfig, ax = plt.subplots()ax.scatter(Data['X'], Data['Y'])# Label Axis (updated to reflect relative meanings)plt.xlabel('COLUMN')plt.ylabel('ROW')# Set Titleax.set_title("Reference Plot", size=18)# Label Points with IDsData[['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 coordinatesax.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 namesylabels = ['1', '2'] # Give y-ticks relative row number names# Apply new labels to custom tick locationsax.set_xticklabels(xlabels)ax.set_yticklabels(ylabels)# Display the plotplt.show()

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

注意事项与最佳实践

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

动态生成刻度: 在实际应用中,如果部件的引脚数量或布局是可变的,不应硬编码刻度位置和标签。您可以从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轴执行类似操作。

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

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

总结

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

以上就是Matplotlib教程:在绝对坐标绘图中使用自定义相对轴刻度标签的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1377471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
BERT词嵌入长文本处理与内存优化实践
上一篇 2025年12月14日 17:48:27
BERT模型长文本词向量生成与内存优化实践
下一篇 2025年12月14日 17:48:36

相关推荐

  • 探探App如何导出联系方式_探探App联系方式导出方法及数据安全

    探探不支持导出联系方式是因平台严格保护用户隐私,防止信息滥用和安全风险。所有通信在App内加密进行,禁止未经同意获取他人信息,符合《个人信息保护法》要求。用户可通过聊天自愿交换微信等信息,或在“瞬间”展示社交账号,但必须获得对方明确同意。警惕所谓“导出器”或“破解工具”,多为诈骗软件,可能导致账号被…

    2026年9月5日
    400
  • 怎么在学信网查考研成绩_学信网考研成绩查询方法

    首先通过学信网微信公众号绑定账号并发送“考研成绩”查询;其次可直接登录学信网指定查分网址查看;最后可通过学信网官网进入研招网服务板块,输入个人信息查询。 如果您已完成2025年全国硕士研究生招生考试,且成绩已公布,但无法通过常规方式查询,则可能是由于信息输入有误或未绑定相关账号。以下是通过学信网查询…

    2026年9月5日
    000
  • 华为FreeBuds Pro 3对决苹果AirPods Pro 2:超宽带空间音频的实际体验,谁的临场感更胜一筹?

    华为FreeBuds Pro 3与苹果AirPods Pro 2均提供高水准空间音频体验,但技术路径与生态适配不同。AirPods Pro 2依托苹果生态系统,通过头部追踪与设备协同实现声场稳定,适合iPhone用户观看杜比全景声内容;FreeBuds Pro 3搭载自研空间音频2.0,依赖六轴传感…

    2026年9月5日
    100
  • Seer预览文件怎么添加评论_Seer预览添加评论的详细步骤

    可通过Seer插件、外部软件或自定义脚本实现预览时添加评论。安装标注插件后使用快捷键激活工具栏添加文本框;或用macOS预览应用插入便签式评论;亦可配置自定义命令调用脚本生成关联评论文件。 如果您在使用Seer预览文件时希望快速添加评论或标注信息,但发现默认功能未直接提供评论入口,可以通过以下方法实…

    2026年9月5日
    000
  • 百度极速版如何开启广告拦截_百度极速版广告拦截的实用步骤

    开启网站广告拦截可提升百度极速版浏览体验。进入“我的”页面,点击右上角【设置】,找到【广告屏蔽管理】,开启【网站广告屏蔽】开关即可过滤弹窗、横幅广告。确保App为最新版本以避免入口差异。 想让百度极速版浏览网页时更清爽,开启网站广告拦截很简单。这个功能能有效减少网页中的弹窗、横幅等干扰广告,提升浏览…

    2026年9月5日
    100
  • 如何使用Webman框架实现数据可视化和图表展示功能?

    如何使用webman框架实现数据可视化和图表展示功能? Webman是一个轻量级的Python Web框架,它提供了灵活且易于使用的工具,帮助开发者快速构建Web应用。在数据处理和可视化领域,Webman框架有很多功能可以帮助我们实现数据可视化和图表展示的需求。本文将介绍如何使用Webman框架来实…

    用户投稿 2026年9月5日
    000
  • 中信证券银证转账资金如何转出_中信证券银证转账出金指南

    首先确认资金为可取状态且账户正常,当日卖出资金需T+1日后方可转出;通过中信证券信e投APP进入银证转账页面,选择证券转银行并输入金额、密码及验证码完成操作;也可登录电脑端交易平台,在资金管理中选择银证转账提交指令;若无法线上办理,可持身份证和银行卡前往营业部柜台填写申请表办理。 如果您想将中信证券…

    2026年9月5日
    000
  • win10操作中心打不开怎么办_win10操作中心无法打开的解决方法

    首先检查组策略设置是否禁用操作中心,通过gpedit.msc将其设为已禁用或未配置;若无效,使用管理员权限PowerShell重新注册系统应用包并修复系统文件,执行sfc /scannow和DISM命令修复系统映像,最后重启资源管理器进程或计算机恢复功能。 如果您尝试点击任务栏右下角的图标或使用快捷…

    2026年9月5日
    000
  • laravel如何实现基于角色的权限管理_Laravel角色权限管理实现教程

    使用Spatie Laravel-Permission包可快速实现RBAC。先通过composer安装并发布迁移文件,执行数据库更新;在User模型中引入HasRoles trait;创建角色与权限并通过givePermissionTo方法关联;为用户分配角色或直接授权;利用middleware(&…

    2026年9月5日
    100
  • 铁路12306电子发票申请提示信息有误怎么办_铁路12306电子发票提示信息处理方法

    首先检查发票抬头信息是否准确,进入铁路12306 App“我的”-“电子发票”-“发票抬头管理”修改企业名称或税号;其次确认乘车人身份信息与账户一致,核对“本人车票”订单中的姓名和证件号;最后重新申请开具,系统将作废原发票并在180天内生成新发票。 如果您在申请铁路12306电子发票时,系统提示信息…

    2026年9月5日
    000
  • win10任务栏没反应了怎么办_win10任务栏卡死无响应解决方法

    1、重启Windows资源管理器可解决卡顿问题,通过任务管理器重新启动explorer.exe进程;2、使用PowerShell重新注册系统应用修复组件异常;3、禁用“资讯和兴趣”功能避免后台冲突;4、运行DISM和SFC命令修复系统文件损坏;5、创建新用户账户判断是否因配置文件损坏导致问题。 如果…

    2026年9月5日
    2100
  • UC网盘如何查看最近使用文件_UC网盘最近文件访问

    UC网盘可通过“最近使用”功能快速查找近期操作文件,该列表按时间倒序展示;若无此入口,可进入“全部文件”后点击“时间”排序并选择倒序;还可结合搜索框输入关键词后按“今天”“近7天”等时间范围筛选,精准定位目标文件。 如果您在使用UC网盘时需要查找最近访问或操作过的文件,可以直接通过其“最近使用”功能…

    2026年9月5日
    100
  • 番茄小说离线阅读章节丢失怎么办_番茄小说离线阅读章节丢失恢复法

    首先检查离线书架中书籍是否显示异常,若存在则尝试重新加载;若章节缺失可重新下载并确保网络稳定;检查应用存储权限及设备剩余空间是否充足;重启APP并同步账号数据以修复临时故障;如问题仍未解决,联系官方客服并提供账号信息、书籍详情及截图以便技术支持。 如果您在使用番茄小说进行离线阅读时发现已下载的章节丢…

    2026年9月5日
    200
  • 飞猪旅行怎么处理退款问题_飞猪旅行退款进度查询技巧

    首先在飞猪App“我的订单”中找到对应订单,确认是否支持退款并点击“申请退款”,按提示提交材料;若因航班取消等非自愿退票,需上传证明文件;退款进度可在订单详情页查看,通常1-3个工作日内审核,关注服务通知及支付账户流水;若超3天未更新,应联系客服加急处理,并保留沟通记录,必要时通过支付平台或1231…

    2026年9月5日
    100
  • 小米手环如何设置哈利波特主题表盘

    小米手环凭借其强大的功能和个性化的表盘设计赢得了众多用户的青睐。如果你是《哈利波特》的忠实粉丝,想要为你的小米手环换上充满魔法气息的主题表盘,可以按照以下步骤轻松完成设置: 首先,请确保你的小米手环已与手机成功配对,并在手机上安装或更新至最新版本的小米运动健康App。 打开小米运动健康App后,进入…

    2026年9月5日
    000
  • 巴乐兔租房如何缴纳电费

    在巴乐兔租房时,缴纳电费是每位租客日常生活中必不可少的一环。掌握正确的缴费方式,有助于保障用电稳定,避免因欠费带来的不便。 通常情况下,巴乐兔平台提供几种常见的电费缴纳途径。 其一,可通过巴乐兔官方 app 完成缴费。只需打开应用,进入相应的服务页面,找到“电费缴纳”功能。根据提示填写房间号等相关信…

    2026年9月5日
    200
  • Karate Framework:处理带方括号和日期范围的GET请求参数

    本文详细介绍了如何在Karate Framework中构建包含复杂查询参数(如filters[start_date])的GET请求。针对def query无法正确处理带方括号参数名的问题,文章提供了使用param关键字的解决方案,并通过示例代码和请求响应验证了其有效性,旨在帮助用户高效地进行API自…

    2026年9月5日
    200
  • 作业帮怎么查看古诗词赏析_作业帮古诗词赏析功能使用

    使用作业帮查看古诗词赏析可通过拍照搜题或手动搜索实现,首页点击“拍照搜题”对准诗词拍照,系统识别后提供原文、注释、译文、赏析及背景等内容;若无法拍照,可输入“诗名+作者”搜索,选择“古诗词”分类查看解析,包含字词解释、白话译文、写作手法和情感主旨等,部分附带朗读音频与考点提示;建议先了解创作背景,结…

    2026年9月5日
    100
  • 完蛋!我失业了!微软语音游戏App 可用AI查游戏攻略

    ai技术正逐步取代传统网页搜索方式,成为新的发展趋势。微软将这一创新理念引入游戏行业,推出了名为“copilot for gaming”的手机应用,玩家可以借助ai快速获取各类游戏信息,例如游戏推荐、成就解锁方法以及道具合成配方等实用内容。 作为Xbox团队打造的移动应用,“Copilot for …

    2026年9月5日
    100
  • 点淘金币怎么赚取_点淘金币如何快速赚取更多奖励方法

    通过完成日常任务、走路赚金币、孵化元宝、短剧签到和下单返利可高效提升点淘金币收益。1. 每日完成浏览、观看视频等任务并手动领取奖励;2. 开启“走路赚金币”功能,授权步数权限后每日领取对应金币;3. 使用“孵化”功能根据步数积累元宝,每晚确认收益;4. 进入“短剧”专区签到并观看至少一分钟获取奖励;…

    2026年9月5日
    000

发表回复

登录后才能评论
关注微信