绘制timedelta类型数据时坐标轴范围异常问题求助
Plotly绘制timedelta类型数据时Y轴显示异常的修复方案
问题背景
现有如下结构的DataFrame:
commits commitdates Age (in days) Year-Month server_version 0 97 2021-04-07 75 days 2021-04 v1 1 20 2021-05-31 43 days 2021-05 v3 2 54 2021-06-21 54 days 2021-06 v0.1 3 100 2021-06-18 75 days 2021-06 v2.1.0 4 12 2020-12-06 22 days 2020-12 NaN
需求:以server_version为X轴,commits(int64类型)为颜色区分,绘制Age (in days)(timedelta64[ns]类型)的数据。使用Plotly绘图后,Age值显示异常,无法像普通整数一样从0开始正常显示。原代码如下:
import plotly.express as px fig = px.scatter(final_api, x="Version", y="Age (in days)", color="commits", width =1000, height = 800) fig.show()
解决方案
问题根源是Plotly对timedelta64[ns]类型的解析逻辑:它会将时间差转换为基于起始时间戳的数值,而非直观的天数。只需将timedelta类型转换为整数天数即可修复:
转换timedelta列为整数天数
在绘图前,提取Age (in days)的天数数值,生成新列或替换原列:# 提取天数整数,生成新列 final_api['Age (days)'] = final_api['Age (in days)'].dt.days修改Plotly绘图代码
注意原代码中X轴参数"Version"是笔误,应改为实际列名"server_version";同时使用转换后的整数列作为Y轴:import plotly.express as px fig = px.scatter(final_api, x="server_version", y="Age (days)", color="commits", width=1000, height=800) # 强制Y轴从0开始显示 fig.update_layout(yaxis=dict(range=[0, final_api['Age (days)'].max() + 5])) fig.show()可选:处理缺失值
如果需要过滤server_version为NaN的行,可在绘图前添加:final_api = final_api.dropna(subset=["server_version"])
效果说明
转换后,Y轴会以整数天数为单位,从0开始正常显示数值,颜色也会根据commits的大小正常区分。
内容的提问来源于stack exchange,提问作者Brie MerryWeather
相关产品推荐
相关产品推荐

