使用ggplot2绘制R中数据的逐年相关性散点图

使用ggplot2绘制R中数据的逐年相关性散点图,r,plot,ggplot2,R,Plot,Ggplot2,我有一些每年的足球数据,我想测试一下,看看某些球队指标在下一年是否可以重复。我的数据位于data.frame中,看起来像这样: y2003 y2004 y2005 Team 1 51.95455 51.00000 53.59091 Team 2 54.18182 56.31818 49.09091 Team 3 48.68182 46.86364 49.22727 T

我有一些每年的足球数据,我想测试一下,看看某些球队指标在下一年是否可以重复。我的数据位于data.frame中,看起来像这样:

                    y2003    y2004    y2005
Team 1           51.95455 51.00000 53.59091   
Team 2           54.18182 56.31818 49.09091   
Team 3           48.68182 46.86364 49.22727   
Team 4           50.86364 47.68182 48.72727   
我想做的是在x轴上用“n年”和y轴上的“n+1年”散点绘制这个。比如说2003年对2004年,2004年对2005年,2005年对2006年等等,都在同一块地上

然后我想画一条最佳拟合线,看看这种相关性有多强,是否可以重复

使用ggplot2在R中执行此操作的最佳方法是什么?我可以通过以下方式获得初始绘图:

 p=ggplot(df,aes(y2003,y2004))
 p + geom_point()

那么,我是否需要手动添加它们?这类东西有内置的功能吗?如果我一个接一个地添加它们,我将如何获得最佳拟合?

您需要使数据ggplot“友好”,然后很容易:

df <- read.table(text=" y2003   y2004   y2005
Team1   51.95455    51  53.59091
                 Team2  54.18182    56.31818    49.09091
                 Team3  48.68182    46.86364    49.22727
                 Team4  50.86364    47.68182    48.72727
                 ")

#make data ggplot friendly
mycomb <- combn(colnames(df),2)
plotDat <- do.call(rbind,
                   lapply(1:ncol(mycomb),function(i){
                     res <- df[,mycomb[,i]]
                     colnames(res) <- c("x","y")
                     res$Group <- paste(mycomb[,i],collapse="-")
                     res
                   }))

#plot
library(ggplot2)
ggplot(plotDat,aes(x,y,col=Group)) +
  geom_point()

df您需要一个数据框,其中包含每个团队年度组合的一行,其中包含当年和明年的数据以及团队名称。实际上,您可以使用基本R函数在不进行任何拆分-应用-组合操作的情况下获得此结果:

(to.plot <- data.frame(yearN=unlist(df[-ncol(df)]),
                       yearNp1=unlist(df[-1]),
                       team=rep(row.names(df), ncol(df)-1)))
#           yearN  yearNp1  team
# y20031 51.95455 51.00000 Team1
# y20032 54.18182 56.31818 Team2
# y20033 48.68182 46.86364 Team3
# y20034 50.86364 47.68182 Team4
# y20041 51.00000 53.59091 Team1
# y20042 56.31818 49.09091 Team2
# y20043 46.86364 49.22727 Team3
# y20044 47.68182 48.72727 Team4
现在,
ggplot
可以像往常一样用于打印:

library(ggplot2)
ggplot(to.plot, aes(x=yearN, y=yearNp1, col=team)) + geom_point() +
  geom_abline(intercept=coefs[1], slope=coefs[2])

library(ggplot2)
ggplot(to.plot, aes(x=yearN, y=yearNp1, col=team)) + geom_point() +
  geom_abline(intercept=coefs[1], slope=coefs[2])