PyQtGraph使用字符串格式X轴绘图时报错无法转浮点的问题问询
PyQtGraph的plot方法仅支持数值类型的坐标输入,直接传入字符串会触发类型转换报错。你需要采用内部数值映射+自定义刻度格式化的方案解决所有需求,具体实现如下:
实现步骤
统一转换X轴原始数据为连续整数
将月份转换为年份*12 + 月份的整数格式,比如2020年1月对应2020*12 +1 = 24241,2020年12月对应2020*12 +12 = 24252,2021年1月自动顺延为24253,从根源避免跨年数值异常。自定义X轴刻度格式化函数
编写函数将上述整数反向转换为「月份-年份」的显示格式:
def format_month_year(x, pos): year = int(x // 12) month = int(x % 12) # 处理12月取模为0的特殊情况 if month == 0: month = 12 year -= 1 return f"{month}-{year}"
- 给绘图组件的X轴绑定配置
# 获取底部X轴对象 x_axis = tela_graficos.graphicsView.getAxis('bottom') # 绑定自定义格式化函数 x_axis.setTickFormatter(format_month_year) # 设置刻度最小步长为1,缩放时不会生成小数刻度 x_axis.setTickSpacing(levels=[(1, 0)])
- 正常传入数值型X数据绘图
# 1-2020对应的映射值为24241 x = [2020 * 12 + 1] y = [2.514] pen = pg.mkPen(color=(255, 0, 0)) tela_graficos.graphicsView.plot( x, y, name="IGVj", pen=pen, symbol='+' )
效果验证
- 不会触发字符串转浮点的类型报错
- 缩放时X轴始终显示整数刻度,无小数月份
- 跨年自动识别年份,不会出现13、14等无效月份值
内容的提问来源于stack exchange,提问作者Hugo Biller
相关产品推荐
相关产品推荐

