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

2020-05-24 14:37:50 +08:00
 qile1

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

朋友说这个一共 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 ] 

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

1900 次点击
所在节点    程序员
13 条回复
ku9527
2020-05-24 22:37:10 +08:00
你这个需要知道具体数据的意义才能画图吧,如第一个病人的数据 4.88*10e9/L,横坐标和纵坐标分别是啥?
qile1
2020-05-24 22:53:26 +08:00
@ku9527 DxH 500 Series.pdf 这个文件有具体说明,但是我一直没有理解里面说的是啥,结果和直方图我都可以处理,就是散点图我用 python 不知道如何画图,具体描点从哪里开始,什么颜色,看了那个文档还是不知道如何下手
ku9527
2020-05-24 23:23:30 +08:00
哪有啊,那只是通讯协议,4.88 这是个医学数据,你最后会拿到一堆这样的数据。要作图,你总得知道你图的横坐标代表甚,纵坐标代表甚吧
qile1
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
2020-05-25 12:45:24 +08:00
仔细看了,你的理解有误吧, ‘622A01’对应数据为三个字节 : 0x2a62 代表字节数,你不能把 62 转成 98,那不对,0x01 代表只支持一个数据块。这样后面你就能做图了吧
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
2020-05-25 22:13:55 +08:00
@ku9527 颜色不对也可能是他画的时候有问题,好像确实没有红色,明天我问问看仪器上面有没有红色

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

再次感谢回复我的主题。
ku9527
2020-05-26 21:04:39 +08:00
@qile1 这个图像颜色对,是那个调色板的颜色。图像不是分隔的。那个图像的 64 次循环是因为宽和高都是 64,在这个仪器上是这样。你要是换个更大的仪器,仪器显示屏更大的话,这个值可能会改变。对于 64*64 中的其中一个点,它不是直接画一个点,存的是那个 txt 文件中返回的系统图像库的索引。你要在那个点的位置画一个系统图像。该图像库大小为 0x50=80 个。不是你文档中的 120, 然后每个系统图像大小为 4*4d 大小。最终你画出的图像大小为 256*256.
qile1
2020-05-26 21:16:32 +08:00
@ku9527 收到,谢谢,说的太详细了
qile1
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') 画出来的图像是深紫色,而且也不是样例那样的散点图,请教您下,图像截取是否有误,获取图像索引的正确方法应该是啥,如有打扰,先说声抱歉。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/674900

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX