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

如何基于时间为单条条形图设置不同颜色(Python实现)

基于时间为单条条形图分段设置对应颜色

现有如下数据集,需要实现单条横向条形图按时间分段,每段对应指定颜色,X轴标签使用数据集中的时间点。

原始数据集

import pandas as pd
data = pd.DataFrame({'Time (s)': ['30', '1:30', '1:45', '2:10','2:30'],
        'Color': ['red','grey','purple','green','NAN']})

数据集内容:

索引Time (s)Color
030red
11:30grey
21:45purple
32:10green
42:30NAN

最终实现方案

import pandas as pd
import matplotlib.pyplot as plt

data = pd.DataFrame({'Time (s)': ['0:30', '1:30', '1:45', '2:10','2:30'],
        'Color': ['red','grey','purple','green','NAN']})
# 将时间列转换为datetime格式,方便计算时间间隔
data['Duration'] = pd.to_datetime(data['Time (s)'], format='%M:%S')

# 创建画布和坐标轴,设置条形图高度
fig, ax = plt.subplots(figsize=(10,1))

# 循环绘制每个分段的条形
for i in range(len(data)-1):
    # broken_barh用于绘制分段横向条形,参数为[(起始时间, 持续时长)],yrange控制条形的位置和高度
    ax.broken_barh([(data.Duration[i], data.Duration[i+1] - data.Duration[i])], 
                   yrange=(1, 0.5), 
                   facecolor=data.Color[i])

# 设置X轴刻度为数据集中的时间点,标签对应原始时间文本
ax.set_xticks(data['Duration'].to_list())
ax.set_xticklabels(data['Time (s)'].to_list())
# 隐藏Y轴刻度
ax.set_yticks([])

plt.show()

关键说明:

  • 先将时间字符串统一格式并转为datetime类型,方便计算相邻时间的间隔时长
  • 利用matplotlib的broken_barh方法绘制分段横向条形,逐个设置每个分段的颜色
  • 自定义X轴刻度为数据集中的时间节点,隐藏Y轴刻度以贴合单条条形的展示需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:45:33