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

Graph Widget绘制风速时间折线图遇数据类型错误求助

解决Graph Widget绘制风速时间折线图的报错问题

问题根源

报错核心原因是:x轴的hour列为时间字符串格式(如'00:00:00'),无法直接转为数值类型;而绘图组件需要数值型的x轴数据才能执行np.isfinite这类数值计算,因此抛出类型错误。

解决步骤

  • 处理时间列:将字符串转为数值型时间差
    把时间字符串转为datetime类型,再计算相对于起始时间的分钟数(或秒数),得到绘图可用的数值型x轴数据:

    import pandas as pd
    
    # 将原始时间列转为datetime类型
    self.df['datetime_hour'] = pd.to_datetime(self.df.iloc[:, 1])
    # 计算从第一个时间点开始的分钟数,作为x轴数值
    start_time = self.df['datetime_hour'].iloc[0]
    hour_num = (self.df['datetime_hour'] - start_time).dt.total_seconds() / 60
    
  • 处理风速列:确保为数值类型
    如果风速列是字符串格式,先清理非数值字符再转为float:

    # 去除风速列中的非数字/小数点字符,转为float类型
    Windspeed = self.df.iloc[:, 5].str.replace(r'[^0-9.]', '', regex=True).astype(float)
    
  • 修改绘图代码,使用处理后的数值数据
    替换原代码中的hour和Windspeed为处理后的变量,同时调整x轴标签更准确:

    self.Graph_Widget.setBackground('w')
    styles = {'color': 'r', 'font-size': '50px'}
    self.Graph_Widget.setLabel('left', 'Wind Speed (m/s)', **styles)
    self.Graph_Widget.setLabel('bottom', 'Minutes since start', **styles)
    self.Graph_Widget.plot(hour_num, Windspeed, color='blue')
    self.Graph_Widget.showGrid(x=True, y=True)
    # 根据实际计算的时间范围调整X轴区间
    self.Graph_Widget.setXRange(0, hour_num.max(), padding=0.1)
    self.Graph_Widget.setYRange(0, 10, padding=0)
    
  • 可选:在x轴显示原始时间字符串
    如果不想显示分钟数,希望保留时间格式的刻度标签,可以添加以下代码:

    # 生成时间格式的标签列表
    time_labels = self.df['datetime_hour'].dt.strftime('%H:%M:%S').tolist()
    # 设置x轴刻度位置与对应标签
    self.Graph_Widget.setTicks(x=list(zip(hour_num, time_labels)))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:25:18