抱歉有关R的多个问题。我是新手,还在学习!所以我目前正在尝试用我的数据制作一个多行折线图。我有3个治疗组,每组4个人。我正计划将这些因素分为3组。首先,我想确保我的数据在excel中以这样的方式设置,我可以制作这个图。第二,我将如何做到这一点? ggplot是最好的工具还是可以使用另一个包?
我想将我的X轴作为日期(例如,10.15.2015
),我的Y轴作为权重,我的3个治疗组,Lean,AdLib和HF,数据线。正如我上面所说,我使用datum$Group= factor(Datum$Group)
将Pig
个人分组到他们的3个治疗组中。
我在这里看过其他问题,但似乎并不是我想要的。
这是我的数据:
dput(datum)
structure(list(X10.5.15 = c(56L, 54L, 61L, 39L, 52L, 66L, 48L,
49L, 59L, 55L, 37L, 59L), X10.26.15 = c(76L, 70L, 72L, 61L, 79L,
93L, 72L, 72L, 84L, 71L, 50L, 85L), X11.3.15 = c(82L, 76L, 88L,
67L, 90L, 102L, 83L, 83L, 100L, 96L, 56L, 100L), X11.10.15 = c(87L,
84L, 93L, 71L, 99L, 110L, 93L, 93L, 109L, 107L, 65L, 112L), X11.17.15 = c(93L,
90L, 100L, 77L, 106L, 116L, 101L, 100L, 121L, 122L, 71L, 119L
), X11.24.15 = c(102L, 99L, 109L, 86L, 113L, 124L, 107L, 108L,
128L, 128L, 80L, 122L), X12.3.15 = c(114L, 113L, 123L, 100L,
118L, 132L, 122L, 118L, 143L, 142L, 91L, 137L), X12.10.15 = c(117L,
117L, 125L, 106L, 134L, 141L, 130L, 126L, 152L, 151L, 98L, 148L
), X12.17.15 = c(125L, 122L, 134L, 112L, 150L, 154L, 135L, 134L,
162L, 162L, 106L, 160L), X12.22.15 = c(128L, 127L, 135L, 114L,
156L, 161L, 141L, 140L, 166L, 176L, 109L, 166L), X12.29.15 = c(135L,
130L, 142L, 119L, 155L, 164L, 149L, 149L, 174L, 195L, 121L, 176L
), X1.5.16 = c(138L, 135L, 150L, 129L, 167L, 172L, 163L, 154L,
185L, 205L, 128L, 182L), X1.12.16 = c(154L, 157L, 166L, 146L,
180L, 188L, 173L, 163L, 200L, 208L, 140L, 188L), X1.19.16 = c(148L,
151L, 165L, 141L, 180L, 182L, 171L, 176L, 211L, 219L, 149L, 197L
), X1.26.16 = c(154L, 151L, 171L, 148L, 192L, 196L, 181L, 179L,
212L, 230L, 156L, 205L), X2.2.16 = c(162L, 162L, 179L, 154L,
200L, 200L, 191L, 184L, 228L, 228L, 162L, 225L), X2.9.16 = c(172L,
169L, 187L, 164L, 203L, 202L, 188L, 194L, 237L, 253L, 168L, 234L
), X2.16.16 = c(173L, 167L, 192L, 162L, 211L, 215L, 199L, 202L,
233L, 258L, 173L, 238L), X2.23.16 = c(185L, 174L, 202L, 172L,
220L, 218L, 208L, 204L, 253L, 254L, 185L, 239L), X2.29.16 = c(183L,
169L, 202L, 166L, 216L, 220L, 204L, 206L, 256L, 269L, 187L, 252L
), Pig = c(102L, 105L, 108L, 204L, 101L, 104L, 106L, 602L, 103L,
107L, 205L, 603L), Group = structure(c(3L, 3L, 3L, 3L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L), .Label = c("AdLib", "HF", "Lean"), class = "factor")), .Names = c("X10.5.15",
"X10.26.15", "X11.3.15", "X11.10.15", "X11.17.15", "X11.24.15",
"X12.3.15", "X12.10.15", "X12.17.15", "X12.22.15", "X12.29.15",
"X1.5.16", "X1.12.16", "X1.19.16", "X1.26.16", "X2.2.16", "X2.9.16",
"X2.16.16", "X2.23.16", "X2.29.16", "Pig", "Group"), row.names = c(NA,
-12L), class = "data.frame")
提前感谢您的帮助!
答案 0 :(得分:1)
library(ggplot2)
library(reshape2)
#Remove the 'X' from the dates
names(datum) <- sub("^X", "", names(datum))
我们应该将数据重新整理为长格式。我们的想法是为每种类型的数据提供一列。
datum_mlt <- melt(datum, id=c("Group", "Pig"), variable.name="dates")
head(datum_mlt)
# Group Pig dates value
# 1 Lean 102 10.5.15 56
# 2 Lean 105 10.5.15 54
# 3 Lean 108 10.5.15 61
# 4 Lean 204 10.5.15 39
# 5 AdLib 101 10.5.15 52
# 6 AdLib 104 10.5.15 66
正如您所看到的,有一个值,日期,ID和治疗组的列。这样可以更轻松地组织绘图信息。
根据您希望数据的显示方式,有一万种方法可以执行此操作。你没有指定,所以这是一个例子。如果格式正确,我们可以清理轴并使一切看起来更好:
p <- ggplot(datum_mlt, aes(x=dates, y=value, colour=Group, group=Pig))
p + geom_line()
修改强>
在对个人进行分组之前,我会首先删除“猪”。专栏,它看起来有所帮助,但它没有。
datum2 <- datum[names(datum) != "Pig"]
library(dplyr)
datum2 %<>% group_by(Group) %>% summarise_all(mean)
d_melt <- melt(datum2, id="Group")
我们绘制数据。并试着让它看起来更好一点。
p <- ggplot(d_melt, aes(x=variable, y=value, colour=Group, group=Group))
p <- p + geom_line()
p <- p + scale_x_discrete(name="Date", breaks=unique(d_melt$variable)[c(T,F,F)])
p + ggtitle("Grouped Weights Over Time") + theme_minimal()