我有一个如下所示的数据集:
id factor H1 H2 H3 H4 H5 H6
434543 lev3 0.8 0.7 0.7 0.5 0.6 0.8
434544 lev2 0.5 0.7 0.9 0.7 0.7 0.1
434545 lev3 0.7 0.7 0.8 0.5 0.7 0.7
434546 lev2 0.4 0.6 0.5 0.8 0.7 0.2
434547 lev3 0.6 0.7 0.8 0.8 0.8 0.7
434548 lev2 0.7 0.7 0.6 0.7 0.8 0.4
434549 lev2 0.8 0.8 0.8 0.7 0.6 0.5
434550 lev1 0.3 0.3 0.4 0.3 0.4 0.5
434551 lev1 0.0 0.3 0.4 0.3 0.2 0.4
434552 lev3 0.6 0.8 0.8 0.8 0.6 0.7
434553 lev2 0.6 0.8 0.5 0.2 0.5 0.8
我想在每个时间点(H1 ... H6)绘制水平的平均值和SD,但是通过平均值绘制一条连续线,而不是条形图。最好的方法是什么?
答案 0 :(得分:5)
这是使用优秀的ggplot2
包进行此操作的一种方法。
require(ggplot2)
require(reshape)
# Load data
data = read.table('data.txt', header=T)
# Format data
data = melt(data, id.vars=c('id', 'factor'), variable_name='time')
data$time = as.numeric(gsub('H(.+)', '\\1', data$time))
# Function to summarize y at each x
getband <- function(y.in){
ymax = mean(y.in) + sd(y.in)
ymin = mean(y.in) - sd(y.in)
data.frame(ymax, ymin)
}
# Plot
dev.new(width=5, height=4)
qplot(time, value, group=factor, geom='point', color=factor, fill=factor, data=data) +
stat_summary(color=0, fun.data=getband, geom='ribbon', alpha=0.2) +
stat_summary(fun.y=mean, geom='line')