Python Matplotlib 教程- Matplotlib 如何进行数据点标记

news/2025/3/9 10:40:22/文章来源:https://www.cnblogs.com/chenshifu666/p/18663035

Python Matplotlib 数据点标记

在数据可视化中,数据点标记是非常重要的部分。无论是绘制折线图、散点图还是柱状图,清晰地标记关键数据点可以帮助观众快速理解图表的核心信息。本篇文章将详细介绍如何在 Python 的 Matplotlib 中实现数据点标记,从基础使用到高级自定义,帮助新手快速上手并熟练应用。

目录

  • 基本数据点标记
  • 自定义数据点样式
  • 为数据点添加标签
  • 动态标记数据点
  • 结合多种图表标记数据点
  • 综合案例:数据点标记实战
  • 总结与技巧

基本数据点标记

在 Matplotlib 中,基本的数据点标记可以通过设置 marker 参数来实现。

1. 使用默认标记

Matplotlib 提供了多种内置的标记类型,包括圆圈、三角形、星星等,常用的 marker 值如下:

  • o: 圆圈
  • s: 方形
  • ^: 上三角
  • *: 星号
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]# 绘制折线图并添加默认标记
plt.plot(x, y, marker='o', linestyle='-', color='blue')
plt.title("基本数据点标记")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.show()

输出的图表中,每个数据点都会被圆圈标记。

2. 设置标记大小和颜色

通过 markersizemarkerfacecolor 等参数可以进一步控制标记的外观:

plt.plot(x, y, marker='^', markersize=10, markerfacecolor='red', linestyle='--', color='green')
plt.title("设置标记大小和颜色")
plt.show()

自定义数据点样式

为了使图表更加个性化,我们可以对数据点的样式进行深入定制。

1. 修改边框和填充

通过 markeredgewidthmarkeredgecolor 可以设置标记的边框宽度和颜色:

plt.plot(x, y, marker='o', markersize=12, markeredgewidth=2, markeredgecolor='black', markerfacecolor='yellow')
plt.title("标记边框和填充")
plt.show()

2. 不同点不同样式

通过循环或列表的方式,可以为不同的数据点设置不同的标记样式:

markers = ['o', 's', '^', '*', 'd']
for i, marker in enumerate(markers):plt.plot(x[i], y[i], marker=marker, markersize=12, label=f"Point {i+1}")
plt.legend()
plt.title("不同点的标记样式")
plt.show()

为数据点添加标签

在许多情况下,标记数据点本身并不足够,还需要为数据点添加文本标签。

1. 使用 annotate 添加标签

annotate 方法可以灵活地在数据点旁边添加注释:

for i in range(len(x)):plt.annotate(f"{y[i]}", (x[i], y[i]), textcoords="offset points", xytext=(0, 10), ha='center')
plt.plot(x, y, marker='o')
plt.title("添加数据标签")
plt.show()

2. 自动调整标签位置

通过设置 xytext 参数的偏移量,可以避免标签和标记重叠:

for i in range(len(x)):offset = (-10, 10) if i % 2 == 0 else (10, -10)plt.annotate(f"{y[i]}", (x[i], y[i]), textcoords="offset points", xytext=offset, ha='center')
plt.plot(x, y, marker='o')
plt.title("自动调整标签位置")
plt.show()

动态标记数据点

当数据量较大时,可以通过动态交互来标记特定的数据点。

1. 鼠标悬停标记

通过 mpl_connect 监听鼠标事件,可以实现鼠标悬停时高亮特定数据点:

fig, ax = plt.subplots()
points, = ax.plot(x, y, marker='o', linestyle='-', color='blue')def on_hover(event):if event.inaxes == ax:for i, (px, py) in enumerate(zip(x, y)):if abs(event.xdata - px) < 0.2 and abs(event.ydata - py) < 2:plt.annotate(f"({px},{py})", (px, py), textcoords="offset points", xytext=(10, 10), ha='center')fig.canvas.draw()fig.canvas.mpl_connect('motion_notify_event', on_hover)
plt.title("动态标记数据点")
plt.show()

结合多种图表标记数据点

在实际应用中,不同类型的图表可能需要特定的标记方式。例如,柱状图中的峰值标记或散点图中的聚类中心标记。

1. 柱状图标记峰值

x = ['A', 'B', 'C', 'D', 'E']
y = [5, 7, 10, 3, 6]plt.bar(x, y, color='lightblue')
max_index = y.index(max(y))
plt.text(x[max_index], y[max_index], f"峰值: {max(y)}", ha='center', va='bottom', fontsize=12, color='red')
plt.title("柱状图峰值标记")
plt.show()

2. 散点图标记聚类中心

from sklearn.cluster import KMeans
import numpy as np# 随机生成数据
data = np.random.rand(100, 2)
kmeans = KMeans(n_clusters=3).fit(data)
centers = kmeans.cluster_centers_plt.scatter(data[:, 0], data[:, 1], alpha=0.6)
plt.scatter(centers[:, 0], centers[:, 1], color='red', label='Centers', marker='x', s=100)
plt.legend()
plt.title("散点图聚类中心标记")
plt.show()

综合案例:数据点标记实战

以下代码展示如何结合上述技巧,在折线图中动态标记最大值和自定义重要点:

x = np.linspace(0, 10, 50)
y = np.sin(x)# 标记重要点
important_points = [(np.pi, 0), (3*np.pi, 0)]
for px, py in important_points:plt.plot(px, py, 'ro', markersize=8)plt.annotate(f"({px:.2f}, {py:.2f})", (px, py), textcoords="offset points", xytext=(-10, 10), ha='center')# 标记最大值
max_index = np.argmax(y)
plt.plot(x[max_index], y[max_index], 'go', markersize=10)
plt.annotate(f"Max: {y[max_index]:.2f}", (x[max_index], y[max_index]), textcoords="offset points", xytext=(10, -10), ha='center')plt.plot(x, y, linestyle='--', marker='o', markersize=5)
plt.title("综合数据点标记案例")
plt.show()

总结与技巧

  1. 选择合适的标记样式:根据数据类型和图表风格选择合适的标记,避免标记过多影响美观。
  2. 灵活运用标签:为关键点添加清晰的标签,但注意避免图表过于拥挤。
  3. 动态交互:在数据量较大时,通过动态交互功能提升用户体验。
  4. 综合运用:结合多种图表标记技巧,满足复杂场景需求。

通过本篇文章的学习,相信你已经掌握了 Matplotlib 数据点标记的常用方法和技巧。动手实践是提高技能的最佳方式,快打开 Python 开始绘图吧!

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

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

相关文章

P1803 凌乱的yyy / 线段覆盖

P1803 凌乱的yyy / 线段覆盖 题目 现在各大 oj 上有 \(n\) 个比赛,每个比赛的开始、结束的时间点是知道的。 yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。 所以,他想知道他最多能参加几个比赛。 由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参…

P1325 雷达安装

P1325 雷达安装 题目 假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围 \(d\)。你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内。 数据使用笛卡…

第4章 类型设计准则

第4章 类型设计准则​DO​:类应该由一组定义明确、相互关联的成员组成。 一个类,如果能用一句话描述清楚它的用途,那么它的设计是优秀的。1 类型(class、struct)和 namespace​DO​:namespace 用于组织类,通过 namespace 将相关功能按层次铺开,但不要有过深的层次、过多…

BurpSuite实操之代理功能

一、代理原理Burp Suite代理工具是以拦截代理的方式,拦截所有通过代理的网络流量,如客户端的请求数据、服务器端的返回信息等。通过拦截,Burp Suite以中间人的方式,可以对客户端请求数据、服务端返回做各种处理,以达到安全评估测试的目的。在日常工作中,我们最常用的web客…

window11安装安卓子系统,畅玩安卓软件

在Windows 11刚推出时,微软便宣称该操作系统中可以直接安装运行安卓APK应用程序,如同Android虚拟机一样,不过是要实现这一功能,我们必须在Windows 11中单独安装Windows 11安卓子系统,这里说明一下其标准的名称为:适用于 Android™️ 的 Windows 子系统(Windows Subsyste…

Python + Appium 自动化操作微信入门(超详细)

Appium是一个开源的自动化测试工具,支持 Android、iOS 平台上的原生应用,支持 Java、Python、PHP 等多种语言。Appium是一个开源的自动化测试工具,支持 Android、iOS 平台上的原生应用,支持 Java、Python、PHP 等多种语言。 Appium 封装了 Selenium,能够为用户提供所有常见…

浅谈STC单片机看门狗的作用和使用成都控制器开发

有的控制器的运行环境是很复杂的,比如可能突然来个电压,突然来个浪涌,周围存在的强电磁场也可能交替对控制器造成冲击,也有可能外部器件出现错误很久不响应,这样就有可能让单片机的程序跑飞,或者进入死循环出不来,那这就完蛋了。怎么办呢? 一个简单的办法就是使用单片机…

【云计算】银行数据中心私有云平台2.0建设(来自真实案例,很有启发性)

【导读】某行数据中心私有云平台一期建设后投入使用。但在使用过程中遇到了诸多实际问题:审批流程不贴合实际情况、自动化程度较低、云平台无法与CMDB联动、裸金属纳管等。本文对问题根源进行了探讨,并分享了通过对资源管理模式、审批流程、资源部署、微服务部署等方面进行优…

markdown学习记录

markdown学习 标题 标题用“#” 字体 这是加粗(两个星号) 这是倾斜(一个星号) 加粗+倾斜(三个星号) 这是删除线 (两个~~) 引用大于号是引用分割线(“---”或“***”) 插入图片 !+[名称]+(URL)超链接 [地址名]+(网址) 我的博客地址 列表 有序用数字,无序用“-”号A…

【实用技巧】【探讨】Java 中比较两个对象的差异

1 前言 大家平时写业务代码的时候,应该能感知到哪些是基础配置数据,哪些是实例数据。比如营销里的活动信息、促销信息就属于配置型数据,基于活动带来的订单参与活动信息属于实例数据。比如一些规则信息、流程信息等类似一种版本的概念。那么版本跟版本之间的差异、以及创建…

主机与虚拟机互ping不通的解决办法

一、主机ping不通虚拟机,但虚拟机可以ping主机 解决办法:二、虚拟机ping不通主机,但主机可以ping虚拟机 解决办法: 这里说的第一点我不知道,我是虚拟机可以ping通百度,之前虚拟机有过相关配置 我这里主要是win11电脑网络连接这里开启防火墙下面简单的说明下Vmware的网络连…

Win32汇编学习笔记09.SEH和反调试

Win32汇编学习笔记09.SEH和反调试-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net SEH - structed exception handler 结构化异常处理 跟筛选一样都是用来处理异常的,但不同的是 筛选器是整个进程最终处理异常的函数,但无法做到比较精细的去处理异常(例如处理…