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

绘制子图触发TypeError:Timestamp与float无法执行减法运算

问题解决:直方图叠加正态分布曲线的类型错误修复

错误原因

触发TypeError的核心问题是:你传给norm.pdf的是完整的DataFrame(包含Timestamp类型列),但norm.pdf仅接受数值型数据。当函数尝试用DataFrame里的Timestamp值和均值(float类型)做减法运算时,就会出现类型不兼容的错误。

另外,直方图默认是计数分布,而正态分布PDF是密度分布,两者纵轴尺度不匹配,需要统一为密度尺度才能让曲线和直方图对齐。


修正步骤与完整代码

1. 提取排序后的数值列

将排序操作限定在%Returns列,只保留数值型数据,而非整个DataFrame:

# 修正:仅提取并排序%Returns列
s1 = Read_FDX['%Returns'].sort_values()
s2 = Read_PAG['%Returns'].sort_values()
s3 = Read_R['%Returns'].sort_values()
s4 = Read_UPS['%Returns'].sort_values()

2. 绘制密度直方图

给hist函数添加density=True参数,让直方图纵轴表示概率密度,和正态分布PDF的尺度匹配:

fig , axes = plt.subplots(2, 2, figsize = (15,8))

# 绘制密度直方图(纵轴为概率密度)
axes[0, 0].hist(Read_FDX['%Returns'], bins=100, color='red', density=True)
axes[0, 1].hist(Read_PAG['%Returns'], bins=100, color='blue', density=True)
axes[1, 0].hist(Read_R['%Returns'], bins=100, color='green', density=True)
axes[1, 1].hist(Read_UPS['%Returns'], bins=100, color='black', density=True)

3. 绘制正态分布曲线

用提取的数值序列计算PDF并绘制曲线:

from scipy.stats import norm

# 叠加正态分布拟合曲线
axes[0, 0].plot(s1, norm.pdf(s1, mean1, std1), color='darkred', linewidth=2)
axes[0, 1].plot(s2, norm.pdf(s2, mean2, std2), color='darkblue', linewidth=2)
axes[1, 0].plot(s3, norm.pdf(s3, mean3, std3), color='darkgreen', linewidth=2)
axes[1, 1].plot(s4, norm.pdf(s4, mean4, std4), color='gray', linewidth=2)

# 可选:添加标题、优化布局
axes[0,0].set_title('FDX Returns with Normal Fit')
axes[0,1].set_title('PAG Returns with Normal Fit')
axes[1,0].set_title('R Returns with Normal Fit')
axes[1,1].set_title('UPS Returns with Normal Fit')
plt.tight_layout()
plt.show()

可选优化:更平滑的拟合曲线

如果想要曲线更平滑,可以用numpy.linspace生成覆盖数据范围的密集x值,替代原始排序数据:

import numpy as np

# 以FDX为例,生成1000个均匀分布的x值
x1 = np.linspace(s1.min(), s1.max(), 1000)
axes[0,0].plot(x1, norm.pdf(x1, mean1, std1), color='darkred', linewidth=2)

内容的提问来源于stack exchange,提问作者Seyed Hossein Fatemi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:18:09