R语言 如何制作一个y值散布在多列中的散点图?

qvtsj1bj  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(315)

我有一个df,n = 1136行,每行代表一个受试者。我试图为每个受试者创建一个散点图系列,x值代表时间间隔,y值代表实际读数。在这种情况下,我们只是假设每个读数以15分钟为间隔。不知道如何在不为每个受试者创建单独散点图的情况下进行此操作。
| 研究编号|读数1|读数2|读数3| .读数50|
| - ------| - ------| - ------| - ------| - ------|
| 一百二十三|四十五|二十三|||
| 一百二十四|五十六|四十五|||
| 一百二十五|九一二|五十六|||
我试过将所有的读数合并到一个列中,但意识到我将创建1,000多个散点图来捕获整个数据集。

f3temu5u

f3temu5u1#

下面是一个ggplot2/dplyr的解决方案,我同意其他评论者的观点,制作1100+个人的情节是不现实的,把每个人都画在一个情节里可能会更好,如果每次阅读是15分钟的间隔(例如,Reading1表示0分钟至15分钟),那么你需要加长你的数据,把所有的读数合并成一个长列。一旦读数合并成一列,你就可以把这列转换成15分钟的间隔,以更好地表示你的x轴。

library(tidyverse)
StudyID <- c(100:110)
Reading1 <- sample(20:100, 11, T); Reading2 <- sample(20:50, 11, T); Reading3 <- sample(10:30, 11, T)
Reading4 <- sample(20:100, 11, T); Reading5 <- sample(20:50, 11, T); Reading6 <- sample(10:30, 11, T)

df <- data.frame(StudyID, Reading1, Reading2, Reading3, Reading4, Reading5, Reading6) %>%
  pivot_longer(cols = -StudyID, names_to = "time") %>%
  mutate(StudyID = factor(StudyID)) %>%
  mutate(time = as.numeric(str_replace(time, "Reading", ""))) %>%
  mutate(time = time*15) %>%
  mutate(lowertime = time-15) %>%
  mutate(timeinterval = paste0(lowertime,"-",time))

ggplot(df, aes(x = timeinterval, y = value
               , color = StudyID # <- remove this to prevent each subject getting its own color
               )) +
  geom_point() + 
  ylab("Reading Value") + xlab("Time Interval in Minutes") + 
  ggtitle("Reading Plot") + theme(legend.position = "none")

相关问题