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

如何将datetime中的时间转换为字符串/数值以用于颜色映射

解决散点图按datetime时间着色的问题

你遇到的核心问题是:plt.scatter()的c参数仅支持数值类型,而datetime.time是对象类型,所以会抛出类型错误。解决思路是把时间转换成一天内的小时数(带小数,比如14:15就是14.25),用这个数值作为颜色映射的依据。

两种可行的转换方法

方法一:直接提取时分秒计算小时数

通过dt属性分别提取时、分、秒,转换成总小时数:

# 计算一天中的精确小时数(包含分钟、秒的小数部分)
hour_of_day = above_aligned["timestamp"].dt.hour + above_aligned["timestamp"].dt.minute/60 + above_aligned["timestamp"].dt.second/3600

x = dfbelow[1:].wind_speed.values
y = above_aligned["WS"].values
plt.scatter(x, y, s=20, c=hour_of_day, cmap='YlOrBr')

plt.xlabel("Below Canopy Wind Speed (m/s)")
plt.ylabel("Above Canopy Wind Speed (m/s)")
plt.title("Above vs. Below Canopy Wind Speeds (m/s)")
plt.colorbar(label="Time of Day (Hours since 00:00)")
plt.show()  # 注意这里要加括号,否则不会显示图像

方法二:通过总秒数转换小时数

利用时间对象的总秒数,再转换为小时:

# 将时间转换为一天内的总秒数,再除以3600得到小时数
hour_of_day = above_aligned["timestamp"].dt.time.apply(lambda t: t.hour*3600 + t.minute*60 + t.second) / 3600

# 绘图代码与方法一一致
x = dfbelow[1:].wind_speed.values
y = above_aligned["WS"].values
plt.scatter(x, y, s=20, c=hour_of_day, cmap='YlOrBr')

plt.xlabel("Below Canopy Wind Speed (m/s)")
plt.ylabel("Above Canopy Wind Speed (m/s)")
plt.title("Above vs. Below Canopy Wind Speeds (m/s)")
plt.colorbar(label="Time of Day (Hours since 00:00)")
plt.show()

额外注意点

  • 原代码中plt.show缺少括号,必须写成plt.show()才会渲染并显示图像。
  • 颜色条的标签可以根据需求调整,比如改成"Time (HH:MM)",但因为我们用的是小时数值,显示小时数更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:45:49