我刚刚开始学习R,并且很难在R
中创建Spaghetti图。尝试在每个对象和不同对象的y轴(时间)上绘制HR
,HR_5min
,HR_30min
,HR_2hr
,HR_12hr
和HR_24hr
MED
的彩色线条(2种不同的药物)。
将非常感谢您的帮助。谢谢。
ID MED HR HR_5min HR_30min HR_2hr HR_12hr HR_24hr
1 VI 130 120 114 110 130 100
2 DI 140 120 100 97 93 85
答案 0 :(得分:0)
欢迎您!您的问题不是很清楚,您还没有放置任何代码,因此您得到了一些赞成票(不是我的!)。但是也许我可以为您提供一些提示:
首先,您需要研究基础R
,但是要进行非常漂亮的绘图,了解ggplot2
数据包和处理数据非常有用,dplyr
是很好的“方言”(尽管您应该始终在基础R
之前学习)。这两个软件包都在tidyverse
软件包中,但是您可以分别加载它们。
library(dplyr)
library(ggplot2)
ggplot2
喜欢数据的长格式(搜索长格式和宽格式,您将有很多不错的示例),因此我们需要对其进行一些转换:
# long format (read the bottom of the post if you do not see your data!)
long <- dats %>% gather(time, value, -c(ID, MED))
long
ID MED time value
1 1 VI HR 130
2 2 DI HR 140
3 1 DI HR 145
4 2 VI HR 123
5 1 VI HR_5min 120
6 2 DI HR_5min 120
7 1 DI HR_5min 159
8 2 VI HR_5min 169
9 1 VI HR_30min 114
10 2 DI HR_30min 100
11 1 DI HR_30min 129
... and so on...
现在,您可以将原始变量的名称用作时间,但最好给它们一个顺序,以正确绘制它们:
# reordering the factors
long$time <- factor(long$time, levels = c("HR","HR_5min","HR_30min","HR_2hr","HR_12hr","HR_24hr"))
现在情节!
# the data
long %>%
# here you put the aes, you'd like to study a bit ggplot2
ggplot(aes(x = time, y = value, group =MED, color = as.factor(MED), label = value)) +
# here the type of plot
geom_line(size = 1) +
# faceting by ID
facet_wrap(vars(ID)) +
# we need labels
geom_text() +
# you can do almost everything
theme(legend.position="bottom")
PS
您仅发布了两个ID
,而每个发布都只有一个MED
,因此我添加了一些虚假数据,以使绘图更加一致。下次,请确保添加一些不错的数据,并使用dput()
并发布结果,以轻松复制并粘贴到R
中:
dput(dats)
structure(list(ID = c(1L, 2L, 1L, 2L), MED = structure(c(2L,
1L, 1L, 2L), .Label = c("DI", "VI"), class = "factor"), HR = c(130L,
140L, 145L, 123L), HR_5min = c(120L, 120L, 159L, 169L), HR_30min = c(114L,
100L, 129L, 130L), HR_2hr = c(110L, 97L, 134L, 89L), HR_12hr = c(130L,
93L, 124L, 90L), HR_24hr = c(100L, 85L, 129L, 45L)), class = "data.frame", row.names = c(NA,
-4L))
要使我的工作可执行,您只需要执行我粘贴在那里的dats <- structure...
,您的环境中将有一个名为dats的对象,以使脚本可用。希望对您有帮助!