これがを使用したアプローチ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))