javascript - 数据可视化 : Bubble charts, 维恩图和标签云(天哪!)

标签 javascript r charts visualization data-visualization

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

现在的问题是如何可视化这些标签之间的关系。 标签云只是它们频率的一个很好的可视化,但它忽略了哪些标签与其他标签一起出现。 假设标签 :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但我突然想到,这也很好地映射到可视化一个人的美味书签的问题。

最佳答案

如果我正确理解您的问题,图像矩阵 应该可以很好地发挥作用。我想到的实现是一个 n x m 矩阵,其中标记的项目是行,每个标记类型是一个单独的列。矩阵中的每个单元格都将完全由“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))

alt text

关于javascript - 数据可视化 : Bubble charts, 维恩图和标签云(天哪!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224494/

相关文章:

javascript - 文本框属性更改不起作用 jQuery

javascript - 如何在 React 中有条件地设置状态?

r - 高效地将大文件中的特定行读取到 R 中

c# - WinForm Chart - 增加滚动粒度

java在控制台中绘制图形或树

javascript - 以刻度为单位的 HTML - Google 图表 - 列

javascript - 为什么我的 div 在使用 onclick 时没有出现

javascript - Sencha 触摸 : Windows Phone does not scroll to end of page

r - 在 R 中使用 rbind.fill 时保留行名称

r - 允许 gls 中的相关参数取决于分组因子