在R中使用循环来制作具有选定信息的多个图

chhkpiq4  于 2023-11-14  发布在  其他
关注(0)|答案(3)|浏览(91)

我有一个类似这样的框架,我想使用for循环来绘制曲线,对于每一行、性别和剂量组合,y轴为生存率,x轴为时间。例如,我想要一个曲线用于第1次给药时第138行雌性的生存率与时间,然后另一个曲线用于第1次给药时第138行雄性的生存率与时间,以此类推。我如何做到这一点?
| 时间|生存|线|性|剂量|
| --|--|--|--|--|
| 28 |零点九五| 138 |F| 1 |
| 35 |0.65| 138 |F| 1 |
| 41 |0.6| 138 |F| 1 |
| 42 |0.15| 138 |F| 1 |
| 48 |零点零五| 138 |F| 1 |
| 55 | 0 | 138 |F| 1 |
| 5 |零点九五| 138 |F| 1 |
| 11 |零点八五五| 138 |F| 1 |
| 28 |零点九五| 138 |M| 1 |
| 35 |0.65| 138 |M| 1 |
| 41 |0.6| 138 |M| 1 |
| 42 |0.15| 138 |M| 1 |
| 48 |零点零五| 138 |M| 1 |
| 55 | 0 | 138 |M| 1 |
| 5 |零点九五| 138 |M| 1 |
| 11 |零点八五五| 138 |M| 1 |
| 28 |零点九五| 120 |F| 2 |
| 35 |0.65| 120 |F| 2 |
| 41 |0.6| 120 |F| 2 |
| 42 |0.15| 120 |F| 2 |
| 48 |零点零五| 120 |F| 2 |
| 55 | 0 | 120 |F| 2 |
| 5 |零点九五| 120 |F| 2 |
| 11 |零点八五五| 120 |F| 2 |
| 28 |零点九五| 120 |M| 2 |
| 35 |0.65| 120 |M| 2 |
| 41 |0.6| 120 |M| 2 |
| 42 |0.15| 120 |M| 2 |
| 48 |零点零五| 120 |M| 2 |
| 55 | 0 | 120 |M| 2 |
| 5 |零点九五| 120 |M| 2 |
| 11 |零点八五五| 120 |M| 2 |

pbpqsu0x

pbpqsu0x1#

假设您的 Dataframe 名为dfclass(df) == "data.frame",这应该可以工作:

library(ggplot2)

combinations <- unique(df[, c("Line", "Sex", "Dose")])

for (i in 1:nrow(combinations)) {
  line <- combinations$Line[i]
  sex <- combinations$Sex[i]
  dose <- combinations$Dose[i]

  subdata <- df[df$Line == line & df$Sex == sex & df$Dose == dose, ]
  
  plot <- ggplot(subdata, aes(x = Time, y = Survival)) + geom_line() + labs(title = paste("Line", line, ", Sex", sex, ", Dose", dose),
         x = "Time", y = "Survival")
  print(plot)
}

字符串
你给的数据做了相同的图。

u5i3ibmn

u5i3ibmn2#

这是直接使用ggplot,没有任何循环。

library(ggplot2)

ggplot(df, aes(Time, Survival)) +
  geom_line() +
  facet_grid(paste('Sex:', Sex) ~ paste('Line', Line) + paste('Dose', Dose)) +
  theme_bw()

字符串


的数据

qyuhtwio

qyuhtwio3#

by中使用plot

> par(mfrow=with(dat, table(Sex, Dose)) |> dim())
> transform(dat, fac=Reduce(paste0, data.frame(Sex, Dose))) |>
+   by(~fac, \(x) plot(Survival ~ Time, x, type='s', main=el(fac)))

字符串


的数据
如果我们有太多的组合,我们需要一个不同的par方法。

  • 数据:*
> dput(dat)
structure(list(Time = c(28L, 35L, 41L, 42L, 48L, 55L, 5L, 11L, 
28L, 35L, 41L, 42L, 48L, 55L, 5L, 11L, 28L, 35L, 41L, 42L, 48L, 
55L, 5L, 11L, 28L, 35L, 41L, 42L, 48L, 55L), Survival = c(0.95, 
0.65, 0.6, 0.15, 0.05, 0, 0.95, 0.855, 0.95, 0.65, 0.6, 0.15, 
0.05, 0, 0.95, 0.855, 0.95, 0.65, 0.6, 0.15, 0.05, 0, 0.95, 0.855, 
0.95, 0.65, 0.6, 0.15, 0.05, 0), Line = c(138L, 138L, 138L, 138L, 
138L, 138L, 138L, 138L, 138L, 138L, 138L, 138L, 138L, 138L, 138L, 
138L, 120L, 120L, 120L, 120L, 120L, 120L, 120L, 120L, 120L, 120L, 
120L, 120L, 120L, 120L), Sex = c("F", "F", "F", "F", "F", "F", 
"M", "M", "M", "M", "M", "M", "M", "M", "F", "F", "F", "F", "F", 
"F", "F", "F", "M", "M", "M", "M", "M", "M", "M", "M"), Dose = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L)), class = "data.frame", row.names = c(NA, 
-30L))

相关问题