和弦图最早用于表现数据关联的可视化,是在生物学中基因组的比对,基于perl开发的circos工具[1]。这种可视化效果图最重要的特点就是,用类似多层极坐标的方式,描述了数据之间的结构,并用弦线表示数据之间的关联关系。
汽车上的分布式控制系统之间的通讯数据,也存在类似的结构和关联关系,例如:节点-报文-信号的组合结构关系,节点之间报文的收发关联关系等。这类通讯数据结构,往往代表了一个车型的核心协议设计。
传统的表格描述方式在展现这种复杂设计时,往往用一个大的二维矩阵,行列标题冠以各节点名称,对应单元格填上PDU(协议数据单元)的名称,这样仅能表示收发关系,通讯数据的详细信息只能用另外的表来描述。
最典型的是Excle用折叠的方式,来层层展开数据之间的组合关系,然后用多级标题矩阵来描述数据的特征。数据量一大就蔚为壮观,拖来拖去都看不到边,重复的标题和格式块占满了屏幕,要找的内容只能靠缩放来查找。
用和弦图的方式来表示汽车总线通讯矩阵其实很简单,在R中从导入dbc到用circlize成图[2],核心脚本不到20行。
以节点收发关系矩阵为例,上图中,圆周上弧度的长短表示所收发信号的bit位长度总和,Tx弧段引出的相同颜色和弦线指向接收节点。
与通信矩阵相比,由于圆周弧长与信号位长成正比,各ECU在总线上通讯的信息量就很容易看出来。发送信息量较大的BCM在弧度上占的比例就比较大,PDC和PEPS就比较小。
和表格中折叠或合并的处理方式不同,数据之间的组合关系可以更直观表现出来,用同心圆的方式从外向内套接多层弧段就可以了。如果上图表示的是CAN报文层的话,往外在套一个节点层,并调整颜色就可以表示节点与报文之间的发送关系了。报文与信号之间的包含关系类似。
更复杂一点的,还可以在弧段扇形区域,配以文字、折线图或表格等,描述更多地信号细节,如:周期、单位等。这样的话,就只能用交互图的方式,在Hint中展现细节了。
有一种说法,树是19世纪的图腾,matrix表是20世纪的图腾,21世纪该轮到网了。
转载请保持原文完整,并注明出处。
参考链接:
1. http://www.plob.org/tag/circos2
2. http://cran.r-project.org/web/packages/circlize/