You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制iOS健康App风格的睡眠统计图表

iOS健康睡眠作息图Python实现方案

你需要的日期-时间维度睡眠条形图完全可以通过matplotlib实现,核心是先处理跨天记录、单日多记录的特殊场景,再映射到水平条形图坐标即可,不需要依赖专属的垂直领域绘图包。

数据预处理规则

处理跨天、多记录场景只需要3步:

  • 先定义睡眠归属日规则:默认将中午12点作为日期分界点,如果睡眠开始时间早于当日12:00,该段睡眠归属到前一天作为统计维度的「睡眠日」,符合大众“凌晨睡觉算前一晚作息”的认知习惯。
  • 拆分跨天睡眠段:所有跨过当日0点(或你自定义的12点分界点)的睡眠记录,在分界点位置拆成两个独立片段,分别归属到分界点前后的两个睡眠日,同时计算每个片段在对应日期行上的时间偏移量(以分钟为单位,从当日0点开始计数)。
  • 单日多条睡眠记录不需要额外聚合,拆分后直接保留所有片段即可,绘图时会在同一日期行上展示多个独立条形。

matplotlib绘图实现逻辑

  • 坐标轴设置:Y轴为离散的睡眠日刻度,按时间倒序从上到下排列(最新日期在最顶部,和iOS健康App展示逻辑一致);X轴为单日时间轴,总长度对应1440分钟(24小时),建议将X轴的起始点设为当日12:00(对应720分钟偏移)、结束点设为次日12:00,让整晚连续睡眠段落在图表中间位置,不会被轴边缘截断。
  • 条形绘制:调用barh水平条形图接口,每个拆分后的睡眠片段对应一个水平条,条形高度设为0.6~0.8避免相邻日期的条重叠,条形长度为片段对应的时长(分钟数),条形左起始位置为片段对应的X轴时间偏移值。如果你的数据包含深睡、浅睡、快速眼动等睡眠阶段标签,可以给不同阶段设置差异化填充色,完全对齐iOS原生图表的视觉效果。
  • 刻度优化:将X轴的分钟刻度转换为HH:MM格式的时间文本,替换默认的数值刻度即可。

其他可选适配工具

  • seaborn:作为matplotlib的上层封装,仅需要更简洁的API即可完成水平条形绘制,内置的样式主题可以减少美化调整的工作量,数据预处理逻辑和matplotlib方案完全一致。
  • plotly:如果需要交互式查看效果(比如鼠标悬浮显示具体入睡/起床时间、缩放查看特定时段记录),可以选择plotly实现,交互体验优于静态matplotlib图表。

你提到的Flutter生态time_chart组件的核心实现逻辑和上述方案完全一致,Python生态目前没有完全对标封装的同名包,但按照上述流程编写代码,不到100行即可复现和iOS健康App完全一致的睡眠图效果。

内容的提问来源于stack exchange,提问作者Cory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:12:52