上周末去旁听了可视化研讨会(Visualization Workshop),主题演讲是来自Universität Konstanz的Daniel A. Keim教授。我对于他提到的pixel bar chart很感兴趣,搜索了一些资料,来介绍一下从bar chart到pixel bar chart的演化过程。

##Bar chart##

bar chart是大家都很常见的条形图,传统的bar chart只能显示很少的一部分数据。

例1.等宽条形图:

有一周车辆销售数据  (例子和图片生成程序源自:Producing Simple Graphs with R

cars trucks suvs
1        2        4
3        5        4
6        4        6
4        5        6
9        12      16

例如:要表示汽车的一周销量1、3、6、4、9,就可做出如下的条形图。

图的横轴为日期,纵轴为销售总量,条形高度代表销售量。

若要表示汽车、卡车、suvs的一周销售量,则可做出这样的条形图

这时横轴表示三种车辆(并且销售数据按日期的排序),纵轴为销售总量,条形高度代表销售量。

如果还想把总销量表示在图中,则需要这样

横轴代表日期,纵轴代表销售总量,每个竖条分成3部分,分别代表不同车辆的销售数据。

以上三个条形图在数据值小的类别上方都留有很大的空白区域,这也是等宽条形图的缺点。

例2.等高条形图:

为了解决空间浪费的问题,可以使用等高条形图。

例如表示上面的汽车、卡车、suvs的一周销售量

    CODE: 

    barplot(rep(1,length(as.matrix(autos_data))),width=as.matrix(autos_data), main="Autos",  beside=TRUE, col=rainbow(5))

等高条形图的缺陷是无法从图中看出准确的数值(就是指上图中的车辆销售量)。

##Pixel bar chart##

pixel bar chart是在原有bar chart的基础上,将每个数据用一个像素为代表显示在图中,像素在图中有坐标位置和颜色这两个指标值(Daniel A. Keim老师的意思是bar chart加上x-y diagrams),故可以显示数据的多个指标,并可在有限的空间展示大量数据。

(图像来源于论文:Pixel bar charts: a visualization technique for very large multi-attributes data sets)

像素条形图的优势是可在一张图中展示大量的多属性数据,例如下图。

这是一个在电子商务中应用的例子,图中的每个像素代表一位顾客,每个条形代表一类产品。a图中的颜色代表顾客的购物总额,b图中的颜色代表访问次数,c图中的颜色代表浏览数量。(从图中可以很直观地看出顾客的购买倾向)

(图像来源于论文:Pixel bar charts: a visualization technique for very large multi-attributes data sets)

pixel bar chart具体的算法详见论文:Pixel bar charts: a visualization technique for very large multi-attributes data sets (能搜索到免费pdf下载)

下一步,有时间研究一下如何实现。