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

为何无法用Matplotlib/Pandas绘制时间差与电压的散点图?

解决Pandas Timedelta类型数据绘制散点图的TypeError问题

问题根源在于**timedelta64[ms]**类型无法被Matplotlib的scatter函数直接处理:scatter要求x、y数据能被统一为相同的数值类型,但timedelta和float64没有通用的底层数值类型,而plt.plot内部会自动完成timedelta到数值的转换,所以能正常运行。

下面是几种可行的解决方法:

方法1:将Timedelta转换为数值类型后用Matplotlib绘制

把Elapsed Time转换成总毫秒数(或总秒数,根据需求),直接作为散点图的x轴数据:

import matplotlib.pyplot as plt

# 转换为总毫秒数(原数据是timedelta64[ms],也可以直接用astype(int)提取数值)
x_values = filtered_data['Elapsed Time'].dt.total_seconds() * 1000
# 或者 x_values = filtered_data['Elapsed Time'].astype(int)

plt.scatter(x_values, filtered_data['Voltage'])
plt.xlabel('Elapsed Time (ms)')
plt.ylabel('Voltage')
plt.show()

方法2:用Pandas内置绘图函数的话,先新增数值型时间列

先在DataFrame里添加一列转换后的数值型时间,再调用plot.scatter:

# 新增毫秒数列
filtered_data['Elapsed Time (ms)'] = filtered_data['Elapsed Time'].astype(int)
# 绘制散点图
filtered_data.plot.scatter(x='Elapsed Time (ms)', y='Voltage')

可选:让x轴显示时间格式

如果希望x轴显示时间格式而非纯数值,可以将转换后的数值再转回datetime类型,然后设置刻度格式化:

import matplotlib.dates as mdates
import pandas as pd

# 把毫秒数转回datetime
x_datetime = pd.to_datetime(filtered_data['Elapsed Time'].astype(int), unit='ms')

plt.scatter(x_datetime, filtered_data['Voltage'])
# 设置时间显示格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S.%f'))
# 自动旋转x轴标签避免重叠
plt.gcf().autofmt_xdate()
plt.xlabel('Elapsed Time')
plt.ylabel('Voltage')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:27:20