R 如何根据主题编号连接普通绘图中的点
我很担心我一直在尝试发明热水,但我想根据主题编号将下面图表中的点连接起来。在这种情况下,受试者为大鼠,分为三个治疗组,测量三次体重 有没有一种方法可以根据老鼠的数量轻松地连接点 数据如前20行所示: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
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,此方法似乎有问题。