V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qile1
V2EX  ›  程序员

检验仪器画散点图显示求助

  •  
  •   qile1 · 2020-05-24 14:37:50 +08:00 · 1697 次点击
    这是一个创建于 1404 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前给朋友吹下牛说自己可以处理大部分仪器的数据,这周收到一份数据,看了好几天文档,把每个英文句子翻译后仔细研究还是没看懂这段数据如何处理

    朋友说这个一共 6 组数据,4 组 是常见的(中性 噬酸 淋巴 单核) 64 次嵌套 64 次两层 for 循环,但是他也没有完全画出图像!

    我咨询了另外一个 pb 开发人员他把画出的图像发我,但是由于我使用的 python 他使用 pb,没有问清楚是怎么处理了,特发到论坛请教下大家(主要是想学习下):

    下面是相关文件下载地址

    https://bitsend.jp/filesgroup/a190c44286b0559a6f0465eed0e2e346.html

    各个文件说明:

    ** DxH 500 Series.pdf 是仪器数据的接口说明文档,里面有图像如何处理的说明,没有看明白 **

    200520.txt #仪器传输过来的原始数据

    20200520_232!OV_5DIFF.jpg 和 20200520_236!OV_5DIFF.jpg 是朋友解码正确的两个散点图

    200520.txt 文件样例如下(<STX><ETB>为传输控制符)

    <STX>2M|3|!!!5DIFF|622A01010240004000000A5004040 省略图像数据 0000000<ETB>56
    <STX>300000000 省略图像数据 0000000<ETB>38
    <STX>400000000 省略图像数据 0000000<ETB>3E
    
    

    我处理时候 将头部的“<STX>2M|3|!!!5DIFF|”、“<STX>3”、“<STX>4” 和尾部 “<ETB>3E”删除,然后取两位由 16 进制转为 10 进制数据 类似如下内容,引号里面的内容是我删除的

    622A01010240004000000A5004040 ***** 0000000“<etb>56\n<STX>3”00000000 ******0000000“<ETB>38\n<STX>4”00000000 ****** 0000000“<ETB>3E”
    
    转换后数据:
    ‘622A01’对应数据 [ 62>98,2A>42,01>1 ] 
    

    这个设备是一个用于研究血液的科研仪器

    13 条回复    2020-05-31 00:22:35 +08:00
    ku9527
        1
    ku9527  
       2020-05-24 22:37:10 +08:00
    你这个需要知道具体数据的意义才能画图吧,如第一个病人的数据 4.88*10e9/L,横坐标和纵坐标分别是啥?
    qile1
        2
    qile1  
    OP
       2020-05-24 22:53:26 +08:00 via Android
    @ku9527 DxH 500 Series.pdf 这个文件有具体说明,但是我一直没有理解里面说的是啥,结果和直方图我都可以处理,就是散点图我用 python 不知道如何画图,具体描点从哪里开始,什么颜色,看了那个文档还是不知道如何下手
    ku9527
        3
    ku9527  
       2020-05-24 23:23:30 +08:00
    哪有啊,那只是通讯协议,4.88 这是个医学数据,你最后会拿到一堆这样的数据。要作图,你总得知道你图的横坐标代表甚,纵坐标代表甚吧
    qile1
        4
    qile1  
    OP
       2020-05-25 00:39:42 +08:00
    @ku9527 感谢回复,”DxH 500 Series.pdf“这个文件的 APPENDIX D Graphic Results and Dataplots 标签,也就是 D-1 页 开始说明画图方法,”Histograms“为直方图 ”Dataplots“为散点图的说明!
    4.88*10e9/L 这个是 wbc 项目的结果和单位,就是白细胞的值是 4.88 单位 10e9/L
    ku9527
        5
    ku9527  
       2020-05-25 12:45:24 +08:00
    仔细看了,你的理解有误吧, ‘622A01’对应数据为三个字节 : 0x2a62 代表字节数,你不能把 62 转成 98,那不对,0x01 代表只支持一个数据块。这样后面你就能做图了吧
    ku9527
        6
    ku9527  
       2020-05-25 19:50:03 +08:00
    而且你给出的图,最后颜色也不对呀,10 个调色板数据如下 :
    1, red=0, green=0, blue=0
    2, red=0, green=101, blue=255
    3, red=115, green=166, blue=57
    4, red=214, green=52, blue=214
    5, red=255, green=125, blue=66
    6, red=255, green=255, blue=255
    7, red=140, green=138, blue=140
    8, red=0, green=144, blue=144
    9, red=206, green=206, blue=206
    10, red=221, green=238, blue=221
    我看你图上还有红色,哪个也对应不上红色啊
    qile1
        7
    qile1  
    OP
       2020-05-25 22:13:55 +08:00 via Android
    @ku9527 颜色不对也可能是他画的时候有问题,好像确实没有红色,明天我问问看仪器上面有没有红色

    0x2a62 这个 0x2a 是哪里来的? “622A01”这个前面也没有数据,自己实在笨,你说从哪里看到调色板颜色的
    ku9527
        8
    ku9527  
       2020-05-25 22:46:39 +08:00
    622A01,中间不就是 2A 来吗
    ku9527
        9
    ku9527  
       2020-05-25 22:48:37 +08:00
    调色板在 D-3 那页,Table D.5 Rendering information block
    qile1
        10
    qile1  
    OP
       2020-05-26 16:39:24 +08:00 via Android
    https://bitsend.jp/download/80fa17e3969192a961f8f81c110222dd.html
    这个是仪器图像的照片
    @ku9527
    “622A01” 我把 622A 转为十进制数就是图像数据长度,然后按两个字符作为十六进制转为 10 进制来处理数据,是不是还得分割成几个图像才可以?

    再次感谢回复我的主题。
    ku9527
        11
    ku9527  
       2020-05-26 21:04:39 +08:00   ❤️ 1
    @qile1 这个图像颜色对,是那个调色板的颜色。图像不是分隔的。那个图像的 64 次循环是因为宽和高都是 64,在这个仪器上是这样。你要是换个更大的仪器,仪器显示屏更大的话,这个值可能会改变。对于 64*64 中的其中一个点,它不是直接画一个点,存的是那个 txt 文件中返回的系统图像库的索引。你要在那个点的位置画一个系统图像。该图像库大小为 0x50=80 个。不是你文档中的 120, 然后每个系统图像大小为 4*4d 大小。最终你画出的图像大小为 256*256.
    qile1
        12
    qile1  
    OP
       2020-05-26 21:16:32 +08:00 via Android
    @ku9527 收到,谢谢,说的太详细了
    qile1
        13
    qile1  
    OP
       2020-05-31 00:22:35 +08:00
    @ku9527 再请教下,我第一次尝试把数据 按 numpy.reshape(64,64) 分成 64*64,然后画到一个 64*64 表格里面,但是图像发布不是样例那样的类型,您说的图像索引是不是分成 64 行后取第一个作为颜色索引?

    我又尝试从 最后一组颜色“221,238,221”后面开始截取数据:即原来数据是 4096 个 到 221 那个位置截取[44:]得到的是一个 4052 个的列表,我在一个 64*64 的画布上面 将每个数据转换为 plt.scatter(xv, yv, s=数据点 c=图像索引, marker='o') 画出来的图像是深紫色,而且也不是样例那样的散点图,请教您下,图像截取是否有误,获取图像索引的正确方法应该是啥,如有打扰,先说声抱歉。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3218 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:18 · PVG 22:18 · LAX 07:18 · JFK 10:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.