如何基于时间为单条条形图设置不同颜色(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 |
|---|---|---|
| 0 | 30 | red |
| 1 | 1:30 | grey |
| 2 | 1:45 | purple |
| 3 | 2:10 | green |
| 4 | 2:30 | NAN |
最终实现方案
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
相关产品推荐
相关产品推荐

