Python+Matplotlib可视化自定义不同图形元素的遮挡关系

董付国老师Python系列教材推荐与选用参考

开学第一课:一定不要这样问老师Python问题

3000道Python习题免费在线练习

================

版权声明:由于公众号后台规则问题,本文暂时无法设置原创标记,但仍属原创内容,微信公众号“Python小屋”坚持只发原创技术文章。

================

推荐教材:

董付国著,《Python数据分析与数据可视化(微课版)》,ISBN:978-7-302-62420-2,清华大学出版社,2023年6月出版

配套资源:教学大纲、课件、源码、数据文件、34小时微课

8ad136abafc7208b63b40cfc8e979f5a.jpeg

================

问题描述:

在Matplotlib扩展库进行可视化时,图形窗口中的元素是分层绘制和显示的,距离人眼近的图层会遮挡距离人眼远的图层中的内容。图形元素与人眼距离的远近由其zorder属性来确定,图形元素的zorder属性的值是一个实数,用来表示距离人眼的远近,类似于计算机图形学中透视变换使用的伪深度。绘制图形时如果没有明确设置zorder的值,会使用其默认值,图形窗口中各元素具有不同的zorder默认值,从远到近依次为:

  • AxesImage、FigureImage、BboxImage对象的zorder默认值为0

  • Patch、PatchCollection对象的zorder默认值为1

  • Line2D、LineCollection(包括次要记号、网格线)对象的zorder默认值为2

  • Text(包括轴标签和标题)对象的zorder默认值为3

  • Legend对象的zorder默认值为5

如果需要自定义可视化结果图形中不同元素的远近和遮挡关系,可以明确设置zorder属性来实现。

参考代码:

aabff46c5f30d93e9801388ad2ddd280.png

运行结果:

l1.zorder=2

l2.zorder=2

s1.zorder=1

s2.zorder=1

legend1.zorder=5

legend2.zorder=1.5

e447ed215d89a784e4a188367864e386.jpeg

===============

温馨提示:

关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(已累计印刷超过180次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1300篇原创技术文章;发送消息“会议”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过700节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习2435道客观题和649道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Python+matplotlib数据可视化鼠标悬停自动标注功能,可以使用matplotlib中的annotate()函数,该函数可以在图形中添加注释文本。 具体实现步骤如下: 1. 导入必要的库: ```python import matplotlib.pyplot as plt from matplotlib.offsetbox import OffsetImage, AnnotationBbox ``` 2. 创建图形并绘制数据: ```python fig, ax = plt.subplots() ax.plot(x_data, y_data) ``` 3. 定义鼠标悬停事件的回调函数,该函数将在鼠标悬停时被调用,根据鼠标所在的数据点位置添加注释文本: ```python def on_hover(event): for i in range(len(x_data)): if event.xdata is not None and event.ydata is not None: if x_data[i] - 0.5 <= event.xdata <= x_data[i] + 0.5 and \ y_data[i] - 0.5 <= event.ydata <= y_data[i] + 0.5: img = plt.imread(image_files[i]) imagebox = OffsetImage(img, zoom=0.2) ab = AnnotationBbox(imagebox, (x_data[i], y_data[i])) ax.add_artist(ab) fig.canvas.draw_idle() ``` 4. 将回调函数绑定到图形的鼠标悬停事件上: ```python fig.canvas.mpl_connect('motion_notify_event', on_hover) ``` 完整代码: ```python import matplotlib.pyplot as plt from matplotlib.offsetbox import OffsetImage, AnnotationBbox x_data = [1, 2, 3, 4, 5] y_data = [2, 4, 1, 5, 3] image_files = ['image1.png', 'image2.png', 'image3.png', 'image4.png', 'image5.png'] fig, ax = plt.subplots() ax.plot(x_data, y_data) def on_hover(event): for i in range(len(x_data)): if event.xdata is not None and event.ydata is not None: if x_data[i] - 0.5 <= event.xdata <= x_data[i] + 0.5 and \ y_data[i] - 0.5 <= event.ydata <= y_data[i] + 0.5: img = plt.imread(image_files[i]) imagebox = OffsetImage(img, zoom=0.2) ab = AnnotationBbox(imagebox, (x_data[i], y_data[i])) ax.add_artist(ab) fig.canvas.draw_idle() fig.canvas.mpl_connect('motion_notify_event', on_hover) plt.show() ``` 执行该代码后,将会在图形中添加自动标注功能。当鼠标悬停在数据点附近时,会自动在该点添加注释文本,并显示与该数据点相关的图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值