How to make a spaghetti plot in R?

China☆狼群 提交于 2021-01-28 06:59:48

问题


I have the following: heads(dataframe):

ID Result Days 

1   70     0         
1   80     23
2   90     15
2   89     30
2   99     40
3   23     24

ect... what I am trying to do is: Create a spaghetti plot with the above datast. What I use is this:

interaction.plot(dataframe$Days,dataframe$ID,dataframe$Result,xlab="Time",ylab="Results",legend=F) but none of the patient lines are continuous even when they were supposed to be a long line.

Also I want to convert the above dataframe to something like this: ID Result Days

1   70     0         
1   80     23
2   90     0
2   89     15
2   99     25
3   23     0

ect... ( I am trying to take the first (or minimum) of each id and have their dating starting from zero and up). Also in the spaghetti plot i want all patients to have the same color IF a condition in met, and another color if the condition is not met.

Thank you for your time and patience.


回答1:


How about this, using ggplot2 and data.table

# libs
library(ggplot2)
library(data.table)

# your data
df <- data.table(ID=c(1,1,2,2,2,3),
                 Result=c(70,80,90,89,99,23),
                 Days=c(0,23,15,30,40,24))

# adjust each ID to start at day 0, sort
df <- merge(df, df[, list(min_day=min(Days)), by=ID], by='ID')
df[, adj_day:=Days-min_day]
df <- df[order(ID, Days)]

# plot
ggplot(df, aes(x=adj_day, y=Result, color=factor(ID))) +
  geom_line() + geom_point() +
  theme_bw()

Contents of updated data.frame (actually a data.table):

 ID Result Days min_day adj_day
  1     70    0       0       0
  1     80   23       0      23
  2     90   15      15       0
  2     89   30      15      15
  2     99   40      15      25
  3     23   24      24       0

Plot output You can handle the color coding easily using scale_color_manual()



来源:https://stackoverflow.com/questions/25291883/how-to-make-a-spaghetti-plot-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!