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
相关产品推荐
相关产品推荐

