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

Python绘制含时间轴3D图遇阻:'00:00:00'格式导致无法绘图求解决

解决3D散点图时间轴格式问题的方法

matplotlib的3D散点图要求轴数据为数值类型,HH:MM:SS格式的字符串无法被识别为坐标值,以下是两种可行的转换方案:

方案1:将时间转换为总秒数

把HH:MM:SS格式转换为从0点开始的总秒数,得到数值型x轴数据,同时可还原时间格式作为刻度标签:

import matplotlib.pyplot as plt
import pandas as pd

# 转换时间列为datetime类型
df['CAPTURE_TIME'] = pd.to_datetime(df['CAPTURE_TIME'], format='%H:%M:%S')
# 计算总秒数
df['TIME_SECONDS'] = df['CAPTURE_TIME'].dt.hour * 3600 + df['CAPTURE_TIME'].dt.minute * 60 + df['CAPTURE_TIME'].dt.second

# 绘制3D散点图
fig = plt.figure()
ax = plt.axes(projection='3d')

zdata = df["TEMPERATURE"]
xdata = df['TIME_SECONDS']
ydata = df["Power"]
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens')

# 可选:将x轴刻度还原为HH:MM:SS格式
unique_times = df['CAPTURE_TIME'].dt.strftime('%H:%M:%S').unique()
unique_seconds = df['TIME_SECONDS'].unique()
ax.set_xticks(unique_seconds)
ax.set_xticklabels(unique_times)

# 设置轴标签
ax.set_xlabel('Capture Time')
ax.set_ylabel('Power')
ax.set_zlabel('Temperature')

plt.show()

方案2:使用时间戳(含日期场景)

如果CAPTURE_TIME包含日期信息,直接转换为秒级时间戳:

import matplotlib.pyplot as plt
import pandas as pd

# 转换为datetime类型(自动识别格式,或指定format)
df['CAPTURE_TIME'] = pd.to_datetime(df['CAPTURE_TIME'])
# 转换为秒级时间戳
df['TIME_TIMESTAMP'] = df['CAPTURE_TIME'].astype(int) // 10**9

# 绘图
fig = plt.figure()
ax = plt.axes(projection='3d')

ax.scatter3D(df['TIME_TIMESTAMP'], df["Power"], df["TEMPERATURE"], c=df["TEMPERATURE"], cmap='Greens')

# 可选:设置x轴刻度为时间格式
ax.set_xticks(df['TIME_TIMESTAMP'].unique())
ax.set_xticklabels(df['CAPTURE_TIME'].dt.strftime('%Y-%m-%d %H:%M:%S').unique(), rotation=45)

ax.set_xlabel('Capture Time')
ax.set_ylabel('Power')
ax.set_zlabel('Temperature')

plt.show()

核心要点

  • 必须将时间字符串转换为数值类型(秒数/时间戳)才能作为3D图的轴数据。
  • 若需要保留时间格式的轴显示,需手动设置xticks和xticklabels完成刻度映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:25:24