绘制级别为系列

时间:2011-10-25 20:26:22

标签: r plot grouping

我有一个如下所示的数据集:

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,但是通过平均值绘制一条连续线,而不是条形图。最好的方法是什么?

1 个答案:

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

enter image description here