如何使用Python绘制带30秒断点和颜色区分的时间序列数据
实现代码及说明
以下代码可以直接运行生成你需要的带断点、分颜色标注的时间序列图:
import matplotlib.pyplot as plt import numpy as np # 原始数据 y_values = [5, 5, 1, 1, 5, 5, 1, 1, 5, 1, 1] x_values = np.arange(30, 331, 30) # 自定义y值对应的颜色映射,可按需修改色值 color_map = { 5: '#e53935', # y=5对应红色 1: '#43a047' # y=1对应绿色 } plt.figure(figsize=(10, 3)) # 逐段绘制:连续相同y值的点连线,y值变化处自动断开 i = 0 n = len(x_values) while i < n - 1: current_y = y_values[i] # 查找当前y值连续的最远下标 j = i while j < n - 1 and y_values[j+1] == current_y: j += 1 # 绘制该段折线和标记点 plt.plot(x_values[i:j+1], y_values[i:j+1], color=color_map[current_y], marker='x', linewidth=2) i = j + 1 # 图表样式配置 plt.xlabel('时间(秒)') plt.ylabel('状态值') plt.xticks(x_values) # 显示所有30秒间隔的刻度 plt.ylim(0, 6) # 调整y轴范围提升显示效果 plt.grid(axis='x', linestyle='--', alpha=0.7) # 增加垂直网格线便于定位时间断点 plt.show()
相关使用建议
- 需要修改不同状态对应的颜色时,直接调整
color_map字典内的色值即可,支持matplotlib兼容的所有颜色格式(命名颜色、十六进制色、RGB值等) - 需要调整标记点样式时,修改
marker参数即可,可选值包括o(圆点)、s(方块)等,额外增加markersize参数可以调整标记点大小 - 需要增加图例时,可在
plt.show()前添加以下代码:from matplotlib.lines import Line2D plt.legend(handles=[ Line2D([], [], color=color_map[5], marker='x', label='状态A'), Line2D([], [], color=color_map[1], marker='x', label='状态B') ]) - 如果后续使用非固定30秒间隔的时间序列数据,只需把
x_values替换为实际时间戳数组,现有绘制逻辑无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者yagya
相关产品推荐
相关产品推荐

