用多种方法在R中制作线图?
抱歉关于R的多个问题。我是新的,仍在学习! 所以我目前正在试图用我的数据做一个多行的线图。 我有3个治疗组,每组4人。 我计划将这些因子分解为3组。首先,我想确保我的数据以excel的formsbuild立,以便我可以制作此图。 其次,我该怎么去做呢? ggplot是最好的工具,还是有另一个可以利用的包?
我想用我的X轴作为date(例如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")
感谢您的帮助提前!
library(ggplot2) library(reshape2) #Remove the 'X' from the dates names(datum) <- sub("^X", "", names(datum))
我们应该把数据重塑为长格式。 这个想法是每个types的数据都有一列。
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
正如你所看到的,有一列值,date,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()