R中的意大利面条图

时间:2019-03-03 14:06:02

标签: r plot

我刚刚开始学习R,并且很难在R中创建Spaghetti图。尝试在每个对象和不同对象的y轴(时间)上绘制HRHR_5minHR_30minHR_2hrHR_12hrHR_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

1 个答案:

答案 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")

enter image description here


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的对象,以使脚本可用。希望对您有帮助!