2

我有来自篮球比赛的传球数据,我有 100 多行表示同一支球队的球员之间的传球,如下所示:

   Player
1  21
2  12
3   5
4  21
5  12
6   2
7  12
8   5
9   3
..

我想可视化这些数据,如下图所示。在每一行,我想在玩家之间画一条线。例如,在第一排之后,球从“球员 21”移动到“球员 12”,那一刻,我想在“球员 21 和 12”之间画一条线,方向无关紧要。

示例图片:http: //img5.imageshack.us/img5/9885/samplex.gif

我还想为这些线条添加颜色[创建一个颜色图例],它将说明玩家之间发生了多少次传球。例如,如果“球员 12 和 21”之间的线是“绿色”,这意味着他们之间的传球高于“XXX”,根据“颜色传奇”。

我怎样才能想象这个?

谢谢

4

3 回答 3

4

这是一种使用ggplot2. 使用这篇文章*.ppm中的想法,我们通过使用 ImageMagick将其转换为添加背景图像。球员的位置在coords,所以你可能想改变他们,但因为ylim他们xlim会留在正确的区域。

在此处输入图像描述

library(ggplot2)
library(pixmap)

data <- data.frame(Player = c(2, 12, 21, 5, 3, 21, 5, 12, 3, 12, 21, 5))
p <- data.frame(Pass1 = data[-nrow(data), ], Pass2 = data[-1, ])
p <- apply(p, 1, function(i) paste(sort(i), collapse = " "))
p <- factor(table(p)[p])
coords <- replicate(2, runif(nrow(unique(data))))
xmap <- setNames(coords[,1], unique(data$Player))
ymap <- setNames(coords[,2], unique(data$Player))
plotData <- data.frame(x = xmap[as.character(data$Player)], 
                       y = ymap[as.character(data$Player)],
                       Player = factor(data$Player))
plotData <- plotData[rep(1:nrow(plotData), each = 2),]
plotData <- cbind(plotData[-c(1, nrow(plotData)),], id = rep(p, each = 2))
image <- read.pnm("p.ppm")

as.raster.pixmapRGB <- function(x) {
  nr <- nrow(x@red)
  r <- rgb((x@red), (x@green), (x@blue))
  dim(r) <- x@size
  r
}

ggplot(plotData, aes(x = x, y = y, label = Player)) +
  annotation_raster(image, -Inf, Inf, -Inf, Inf, interpolate = TRUE) + 
  geom_text(vjust = -1, colour = "red") + xlab(NULL) + ylab(NULL) +
  geom_point(size = 5) + geom_path(aes(colour = id)) + xlim(c(-0.1, 1.1)) +
  theme(axis.ticks = element_blank(), axis.text = element_blank()) +
  scale_colour_discrete(name = "Number of passes") + ylim(c(-0.1, 1.1))
于 2012-12-11T19:48:13.127 回答
1

James Kierstead 在http://www.jameskeirstead.ca/r/slopegraphs-in-r/上有一个使用 R 的坡度图示例

David Ruau 在https://github.com/bobthecat/codebox/blob/master/table.graph.r有一个坡度图 R 程序

Nathan Yau 在他的书Visualize This中使用斜率图有一个很好的示例。如果我没记错的话(现在我没有这本书),他使用 R。

不幸的是,我无法使用 R 找到任何和弦图(见下文)。


Java 选项

Ben Fry 有一个使用 Java/Processing 的斜率图演示


JavaScript 选项

如果你愿意尝试 JavaScript,有几个使用D3的选项:

有关更多示例,请参阅D3 库。

于 2012-12-11T19:28:01.047 回答
0

在 R 中,可以通过circlize包使用和弦图来实现此目的

于 2014-11-02T17:37:03.110 回答