news 2026/10/8 7:14:50

week7-练习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
week7-练习

编程练习题:Matplotlib scatter + text + annotate 综合绘图

题目

使用 matplotlib 完成下面绘图任务:

  1. 创建画布与子图,figsize=(8,6)
  2. 准备数据:
x = [1, 3, 5, 7, 9] y = [2, 6, 3, 8, 4]
  1. 绘制散点图 scatter,点大小 s=80,颜色 c="orange"
  2. 使用ax.text,在坐标 (7,8.5) 添加文字最高点,水平对齐 ha='center',字号 12
  3. 使用ax.annotate添加箭头标注:
    • 标注文字:峰值点
    • 箭头指向目标点 xy=(7,8)
    • 文字放在 xytext=(8,9.5)
    • 箭头样式 arrowstyle='->',箭头颜色 red
    • 文字增加圆角背景框 bbox=dict (boxstyle="round", facecolor="#f0f0f0")
  4. 设置 x 轴范围 xlim (0,10),y 轴范围 ylim (0,11)
  5. 解决中文显示乱码,最后展示图片 plt.show ()

要求:面向对象写法(fig,ax = plt.subplots)

参考答案

import matplotlib.pyplot as plt # 解决中文、负号乱码 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 1 创建画布子图 fig, ax = plt.subplots(figsize=(8, 6)) # 2 数据 x = [1, 3, 5, 7, 9] y = [2, 6, 3, 8, 4] #3 绘制散点图 ax.scatter(x, y, s=80, c="orange") #4 ax.text 添加纯文本 ax.text(7, 8.5, "最高点", ha="center", fontsize=12) #5 annotate带箭头标注 ax.annotate( "峰值点", xy=(7, 8), #箭头指向的数据点 xytext=(8, 9.5), #文字位置 arrowprops=dict(arrowstyle='->', color='red'), bbox=dict(boxstyle="round", facecolor="#f0f0f0") ) #6 设置坐标轴范围 ax.set_xlim(0, 10) ax.set_ylim(0, 11) plt.show()

解析

  1. ax.scatter():绘制散点,s 控制点大小,c 控制点颜色。
  2. ax.text(x,y,s):纯文字,无箭头,使用数据坐标;ha='center'表示文字水平中心落在 (x,y)。
  3. ax.annotate():带箭头标注
    • xy:箭头尖端指向的目标数据点
    • xytext:标注文字放置的坐标
    • arrowprops字典,控制箭头样式、颜色
    • bbox给文字添加背景框,boxstyle="round"代表圆角方框
  4. 坐标体系:scatter、text、annotate 默认都是数据坐标,修改 xlim/ylim,元素会跟着坐标轴缩放。
  5. 中文配置:SimHei黑体解决中文方框,axes.unicode_minus=False解决负号显示异常。

易错点(考试常考)

❌ 混淆 text 和 annotate:text 不能画箭头;annotate 专门用来箭头标注。 ❌ xy 与 xytext 写反:箭头从 xytext(文字)指向 xy(目标点),写反箭头方向颠倒。 ❌ 忘记 rcParams 中文设置,文字显示方框乱码。 ❌ plt.xlim () 和 ax.set_xlim () 混用,面向对象写法推荐 ax.set_xlim。


案例场景:产品月度销量散点标注图

业务背景

某门店统计 5 个月的月度销量数据,x 为月份序号,y 为月度销量。 需要可视化展示各月销量散点,并且:

  1. 在图上用纯文本标记 “销量高点区域”;
  2. 使用带箭头 annotate标注全年销量峰值;
  3. 散点展示每月销量点位。

数据: 月份 x = [1, 3, 5, 7, 9] 销量 y = [2, 6, 3, 8, 4] x:月份编号;y:销量(单位:百件)

绘图需求(和上面代码一一对应)

  1. 创建画布 figsize=(8,6),采用面向对象写法;
  2. 绘制散点,橙色圆点,点大小 80;
  3. 在峰值点上方使用ax.text放置文字:最高点;
  4. 使用ax.annotate添加箭头标注:文字峰值点,箭头指向 7 月销量 (7,8),文字放在右上角,红色箭头,文字圆角浅灰背景框;
  5. 设置 x 轴范围 0~10,y 轴 0~11;
  6. 支持中文正常显示,展示图表。

业务解读

  • scatter:直观展示每个月份的销量数据点;
  • ax.text:放置普通说明文字,不需要箭头,用于区域说明;
  • ax.annotate:箭头精准指向峰值数据点,方便阅读者一眼定位最重要数据,是数据分析图表常用标注手段。

场景拓展提问(课堂思考题)

  1. 如果修改 xlim 坐标轴范围,散点、text、annotate 标注会不会跟着移动?为什么?

答:会移动。三者默认都是数据坐标,绑定坐标轴数值。

  1. text 和 annotate 怎么选?

答:只放文字,不需要箭头 → text;需要箭头指向某一个数据点,突出重点 → annotate。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 7:11:12

Agent-Reach 实战:用命令行驱动 AI Agent 完成多步任务

1. 从零认识 Agent-Reach:一个把 AI Agent 拉回命令行的工具第一次看到 Agent-Reach 这个名字,我下意识把它归类成又一个"套壳聊天框"。真正翻完它的定位和用法之后才发现,这东西的思路完全相反——它不给你花哨的界面,…

作者头像 李华
网站建设 2026/10/8 7:10:49

AI应用底座工程实践:基于Spring Cloud的微服务架构与流式响应治理

1. 从一次深夜救火说起:为什么“AI 应用底座”突然成了刚需去年冬天,一个做智能客服的朋友凌晨两点给我打电话,说他们的系统崩了。不是模型崩了,是模型前面那层“壳”崩了。用户请求进来,网关限流没配好,直…

作者头像 李华
网站建设 2026/10/8 7:10:02

世界第一款动态语言文档

文档,从此会动:用 UniDoc 写一份「能运行」的文档 图表会随数据重新计算,滑块拖一下结果就变,网页和小游戏能直接嵌进正文。UniDoc 让一份文档不再只是一页纸。 我们每天打开的文档,大多是静止的。报告里的图表是一张截…

作者头像 李华