我希望为功能数据制作ggplot2图形。通常,功能数据存储为不同的矩阵。因此,目标是迅速重塑数据。作为一个例子,下面是我在R中获取fda :::增长数据集的粗略传递,它是三个对象的列表:一个男孩矩阵(' hgtm'),一个女孩矩阵( hgtf),以及它们被测量的常见年龄的矢量。
从fda的帮助手册中复制:
增长:伯克利增长研究数据
描述
包含39名男孩和54名1至18岁女孩的高度以及收集年龄的名单。
格式
此列表"增长"包含以下组件:
hgtm是一个31乘39的数字矩阵,给出了31岁时39个男孩的厘米高度。
hgtf一个31乘54的数字矩阵,给出了31岁时54个女孩的厘米高度。
对长度为31的数字向量进行老化,给出测量高度的年龄。
详细
年龄不等。
如何更简洁地完成这一重塑,以便功能数据分析中的人更有可能使用ggplot2制作情节?
## take the list 'growth' from fda package and make dataframe 'gg.growth'
require(fda); require(ggplot2)
gg.growth <- with(growth, data.frame(age=rep(age, ncol(hgtf)+ncol(hgtm)),
hgt=c(hgtf,hgtm),
sex=c(rep("female", length(age)*ncol(hgtf)),
rep("male" , length(age)*ncol(hgtm)))))
## add 'id' variable for subsetting
gg.growth$id <- with(growth,rep(1:(ncol(hgtf)+ncol(hgtm)), each=length(age)))
## make a ggplot
ggplot(subset(gg.growth, id %in% c(1,40,88,93 )),
aes(x=age, y=hgt, colour=sex, group=id), alpha=.5) + geom_line()
答案 0 :(得分:3)
reshape2
对于这类事情非常有用:
library(reshape2)
growth.mlt <- melt(growth[-3]) # don't need 3rd element since it is in rownames
那就是它。现在你可以绘制:
ggplot(growth.mlt, aes(x=Var1, y=value, group=Var2)) +
geom_line() + facet_wrap(~ L1)
这里我们分别绘制男性和女性的身高与年龄:
显然,情节将受益于更好的标签,但你明白了。