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

使用plotnine设置坐标轴缩放报错,如何实现y轴始终显示0原点

问题根源

你用到的y轴字段date_trunc是timedelta64[ns]时间差类型,plotnine默认会为该类型匹配专属的时间差尺度,而非普通的数值连续尺度。你之前尝试的ylim、scale_y_continuous都是为普通数值连续轴设计的,传入的整数0、5和时间差类型不匹配,因此触发类型错误。

解决方案

有两种可行方案,按需选择即可:

方案1:保留时间差类型的y轴

使用plotnine提供的专属时间差尺度方法,参数需传入pandas的Timedelta类型值,而非普通整数:

  • 若要限制y轴范围,用scale_y_timedelta:
import pandas as pd
# 示例为y轴限制为0到5天,可根据你的实际需求调整时间单位
ch_time_plot += p9.scale_y_timedelta(limits = (pd.Timedelta(0), pd.Timedelta(days=5)))

如果需要的时间单位是小时、分钟等,修改pd.Timedelta的参数即可,比如pd.Timedelta(hours=5)代表5小时。

  • 若仅需要显示0原点不需要限制上限,用expand_limits的正确写法:
ch_time_plot += p9.expand_limits(y=pd.Timedelta(0))

方案2:将时间差转为普通数值后绘图

如果不需要y轴显示时间差格式,只需展示数值(比如小时数、秒数),可以先把date_trunc转为普通数值字段再绘图,后续所有普通连续轴的配置方法都可正常使用:

# 新增数值类型字段,示例为把时间差转为小时数,可按需调整单位
ch_time['date_trunc_hour'] = ch_time['date_trunc'].dt.total_seconds() / 3600
# 绘图时y映射为新的数值字段
ch_time_plot = (p9.ggplot(data= ch_time,
                         mapping= p9.aes(x= 'timestamp', 
                                         y= 'date_trunc_hour',
                                         color= 'direction'))
                + p9.geom_line()
                + p9.theme(axis_text_x= p9.element_text(rotation=90))
                + p9.ylim(0,5) # 此时直接传入整数即可正常生效
               )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:06:02