数据可视化:气泡图,维恩图和标签云(哦,我的!)

dre*_*ves 8 javascript charts visualization r data-visualization

假设我有一个大的对象列表(数千或数万),每个对象都标记有少量标记.有几十种或几百种可能的标签,它们的使用遵循典型的幂律:一些标签经常使用,但大多数很少见.事实上,除了最常见的几十个标签之外的所有标签通常都可以被忽略.

现在的问题是如何可视化这些标签之间的关系.标签云只是其频率的一个很好的可视化,但它忽略了哪些标签与其他标签一起出现.假设tag:bar仅出现在标记为foo的对象上.这在视觉上应该是明显的.类似地,三个标签倾向于一起出现.

您可以使每个标记成为一个气泡,让它们彼此部分重叠.从技术上讲,这是一个维恩图,但以这种方式处理它可能是笨拙的.例如,Google图表可以创建维恩图,但仅限3个或更少的集(标签):http: //code.google.com/apis/chart/docs/gallery/venn_charts.html
他们将其限制为3套的原因是这样,它看起来很可怕.请参阅维基百科页面上的"更多数量的集合":http: //en.wikipedia.org/wiki/Venn_diagrams

但这只是在每个可能的交叉点都是非空的情况下.如果共同出现的标签不超过3个(可能是在丢弃稀有标签之后),那么维恩图的集合可以起作用(气泡的大小代表标签频率).

或者可能是具有视觉上更厚或更薄的边缘的图形(如在顶点和边缘中)以表示共现的频率.

你有任何想法,或指向工具或库的指针?理想情况下我会用javascript做这个,但我对R和Mathematica这样的东西或其他任何东西都很开放.如果有人好奇,我很乐意分享一些实际的数据(如果我告诉你它代表什么,你会笑).

附录:我最初想到的应用程序是TagTime,但我发现这也很好地映射了可视化一个美味书签的问题.

dou*_*oug 5

如果我正确理解你的问题,图像矩阵应该在这里很好地工作.我想到的实现是一个nxm矩阵,其中标记的项是行,每个标记类型是一个单独的列.矩阵中的每个单元格将完全由"1"和"0"组成,即,特定项目具有给定标签或者不具有给定标签.

在下面的矩阵中(我旋转了90度,因此它在这个窗口中更适合 - 所以列实际上代表标记的项目,每行显示所有项目中是否存在给定标记),我模拟了其中的场景有8个标签200个标记的项目.,"0"是蓝色,"1"是浅黄色.

该矩阵中的所有值都是随机选择的(每个标记的项目是由两个标记组成的八个绘制,一个蓝色和一个黄色(分别没有标记和标记).所以毫不奇怪,这里没有模式的视觉证据,但是如果您的数据中有一个,这种技术很难实现,可以帮助您找到它.

我使用R生成并绘制模拟数据,仅使用基本图形(无外部包或库):

# create the matrix
A = matrix(data=r1, nrow=1, ncol=8)

# populate it with random data
for (i in seq(0, 200, 1)){r1 = sample(0:1, 8, replace=TRUE); A = rbind(A, r1)}

# now plot it
image(z=A, ann=F, axes=F, col=topo.colors(12))
Run Code Online (Sandbox Code Playgroud)

替代文字http://img690.imageshack.us/img690/3236/imagematrix01.png

  • 鉴于存在“数千个对象”和“数百个标签”,我认为这种可视化不会有助于在数据中找到模式。由此产生的图像可能只是一个巨大的嘈杂图片。 (2认同)

Jay*_*ren 2

如果你的目标是网络,我会创建这样的东西。连接节点的边缘可以更厚或更暗,或者连接它们的力可能更强,因此它们的距离很近。我还会在圆圈内添加标签名称。

一些对此非常有用的库包括:

其他一些值得研究的有趣的 javascript 库是: