R 如何根据主题编号连接普通绘图中的点

R 如何根据主题编号连接普通绘图中的点,r,R,我很担心我一直在尝试发明热水,但我想根据主题编号将下面图表中的点连接起来。在这种情况下,受试者为大鼠,分为三个治疗组,测量三次体重 有没有一种方法可以根据老鼠的数量轻松地连接点 数据如前20行所示: Rat Group Measurement Weight 1 1 1 M0 57 2 2 1 M0 60 3 3 1 M0 52 4 4 1

我很担心我一直在尝试发明热水,但我想根据主题编号将下面图表中的点连接起来。在这种情况下,受试者为大鼠,分为三个治疗组,测量三次体重

有没有一种方法可以根据老鼠的数量轻松地连接点

数据如前20行所示:

   Rat Group Measurement Weight
1    1     1          M0     57
2    2     1          M0     60
3    3     1          M0     52
4    4     1          M0     49
5    5     1          M0     56
6    6     1          M0     46
7    7     1          M0     51
8    8     1          M0     63
9    9     1          M0     49
10  10     1          M0     57
11  11     2          M0     61
12  12     2          M0     59
13  13     2          M0     53
14  14     2          M0     59
15  15     2          M0     51
16  16     2          M0     51
17  17     2          M0     56
18  18     2          M0     58
19  19     2          M0     46
20  20     2          M0     53
我所说的图表是这样的:

我用这个代码制作的:

par(mfrow=c(1,3))
plot(data=data_long[data_long$Group==1,], Weight ~ as.numeric(Measurement), 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 1")
par(new=TRUE)
grid()
plot(data=data_long[data_long$Group==2,], Weight ~ as.numeric(Measurement), 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 2")
grid()
plot(data=data_long[data_long$Group==3,], Weight ~ as.numeric(Measurement), 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 3")
grid()
我如何让R根据鼠号连接点

谢谢大家!

编辑:请求的dput:

structure(list(Rat = 1:20, Group = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L
), .Label = c("1", "2", "3"), class = "factor"), Measurement = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("M0", "M1", "M2", "M3", "M4"), class = "factor"), 
    Weight = c(57L, 60L, 52L, 49L, 56L, 46L, 51L, 63L, 49L, 57L, 
    61L, 59L, 53L, 59L, 51L, 51L, 56L, 58L, 46L, 53L)), .Names = c("Rat", 
"Group", "Measurement", "Weight"), row.names = c(NA, 20L), class = "data.frame")

正如大家所建议的,您应该使用ggplot,或者在使用基本图形的情况下,使用一些for循环。因为我还不知道ggplot,所以我使用了for循环

这仍然比我们的教授与SAS的斗争要容易得多,所以我不介意循环

下面是代码。谢谢大家的帮助

par(mfrow=c(2,3))
lapply(1:3, function(g) {
    plot(data=data_long[data_long$Group==g,], Weight ~ as.numeric(Measurement), 
         ylim=c(0,200), pch=20, xlab="Measurement",
         main=paste("Treatment group",g))
    for(j in 1:max(data_long$Rat)){
      if(data_long[j,]$Group==g){
          lines(data_long[data_long$Rat==j,]$Measurement, 
                data_long[data_long$Rat==j,]$Weight)
      }
    }
    grid()
})
plot(data=data_long[data_long$Group==1,], Weight ~ Measurement, 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 1")
grid()
plot(data=data_long[data_long$Group==2,], Weight ~ Measurement, 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 2")
grid()
plot(data=data_long[data_long$Group==3,], Weight ~ Measurement, 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 3")
grid()

正如大家所建议的,您应该使用ggplot,或者在使用基本图形的情况下,使用一些for循环。因为我还不知道ggplot,所以我使用了for循环

这仍然比我们的教授与SAS的斗争要容易得多,所以我不介意循环

下面是代码。谢谢大家的帮助

par(mfrow=c(2,3))
lapply(1:3, function(g) {
    plot(data=data_long[data_long$Group==g,], Weight ~ as.numeric(Measurement), 
         ylim=c(0,200), pch=20, xlab="Measurement",
         main=paste("Treatment group",g))
    for(j in 1:max(data_long$Rat)){
      if(data_long[j,]$Group==g){
          lines(data_long[data_long$Rat==j,]$Measurement, 
                data_long[data_long$Rat==j,]$Weight)
      }
    }
    grid()
})
plot(data=data_long[data_long$Group==1,], Weight ~ Measurement, 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 1")
grid()
plot(data=data_long[data_long$Group==2,], Weight ~ Measurement, 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 2")
grid()
plot(data=data_long[data_long$Group==3,], Weight ~ Measurement, 
     ylim=c(0,200), pch=20, xlab="Measurement", main="Treatment group 3")
grid()
我建议使用ggplot2,因为它在基本图形中可能会变得单调乏味

# sample dataset
set.seed(12345)
data <- data.frame(
  rat = factor(rep(1:5, times=6)),
  group = factor(rep(1:2, each=15)),
  measurement = factor(rep(1:3, each=5, times=2)),
  weight = runif(30, min=20, max=60))

# require(ggplot2)
ggplot(data=data, aes(x=measurement, y=weight, col=group, group=group:rat)) + 
geom_point() + geom_line() + facet_wrap(~group, ncol=2)
我建议使用ggplot2,因为它在基本图形中可能会变得单调乏味

# sample dataset
set.seed(12345)
data <- data.frame(
  rat = factor(rep(1:5, times=6)),
  group = factor(rep(1:2, each=15)),
  measurement = factor(rep(1:3, each=5, times=2)),
  weight = runif(30, min=20, max=60))

# require(ggplot2)
ggplot(data=data, aes(x=measurement, y=weight, col=group, group=group:rat)) + 
geom_point() + geom_line() + facet_wrap(~group, ncol=2)

你能将你的数据作为dputheaddata_long,20作为你文章的编辑吗?重塑你的数据并使用Matline。所以你想连接属于数据$rat==j的所有点?然后按rat编号选择当前x和y数据的子集。这基本上就是罗兰的建议。或者,使用ggplot添加一条几何图形线,并按主题分组。这将是基础图形的挑战。嗯,这并不具有挑战性,但它需要一些嵌套循环或lappy调用。基本上,不是调用数据上的绘图,而是调用每个面板中的空绘图,即plotNA、xlim=c1,5、ylim=C0200,然后对每个rat使用lines调用来绘制连接点。您可以将数据作为dputheaddata\u long提供吗,20作为对您文章的编辑?重塑您的数据并使用Matline。那么您想连接属于数据$rat==j的所有点吗?然后按rat编号选择当前x和y数据的子集。这基本上就是罗兰的建议。或者,使用ggplot添加一条几何图形线,并按主题分组。这将是基础图形的挑战。嗯,这并不具有挑战性,但它需要一些嵌套循环或lappy调用。基本上,不要对数据调用plot,而是调用每个面板中的空绘图,即plotNA,xlim=c1,5,ylim=C0200,然后对每个rat使用lines调用来绘制连接点。我将对您的代码进行简化。确保它仍然有效。如果没有,请还原我的编辑。@Thomas,此方法似乎有问题。我将发布您代码的简化。确保它仍然有效。如果没有,请还原我的编辑。@Thomas,此方法似乎有问题。