问询Bqplot绘制numpy.uint64数据变负数的设置修复方法
bqplot绘制uint64类型大数显示负数的解决方法
该问题的根源是前后端类型系统的不兼容:bqplot的前端渲染逻辑基于JavaScript实现,而JS默认没有64位无符号整数的原生支持,解析整数时默认按32位有符号整数处理,当传入的numpy.uint64值超过2^32时,高位会被识别为符号位,按补码规则解析就会出现负数,和推测的原因完全一致。
目前bqplot没有内置的配置项可以直接兼容uint64类型的渲染,但是可以通过以下几种简单方法解决问题:
- 优先选择显式类型转换:如果数值没有超过2^53(双精度浮点数可精确表示的整数范围),直接把
uint64数组转换为numpy.float64类型再传入绘图接口即可,不会丢失精度,也不会出现负数显示问题,示例代码如下:import numpy as np # raw_data为原始uint64数组 plot_data = raw_data.astype(np.float64) # 将plot_data传入bqplot对应绘图参数即可 - 如果数值超过253,需要完整保留整数精度:可以先对数值做量级缩放,比如除以103、10^6等对应单位,再修改坐标轴标签标注单位,既可以避免精度丢失也能正常展示。
- 如果需要保留原始值做交互查询:可以把原始
uint64值转成字符串存在自定义tooltip字段中,绘图时使用缩放后的浮点数,交互时展示字符串格式的原始值即可。
这个限制不是bqplot独有的,绝大多数对接JavaScript前端的Python交互绘图库都存在同样的类型兼容问题,不需要修改bqplot底层源码,用上述方法即可快速修复。
内容的提问来源于stack exchange,提问作者The Flying Dutchman
相关产品推荐
相关产品推荐

