在ggplot中绘制多个变量

时间:2013-06-03 03:05:19

标签: r plot ggplot2

我有一个看起来像这样的数据表 -

pos gtt1    gtt2    ftp1    ftp2
8   100 123 49  101
9   85  93  99  110
10  111 102 53  113
11  88  110 59  125
12  120 118 61  133
13  90  136 64  145
14  130 140 104 158
15  78  147 74  167
16  123 161 81  173
17  160 173 88  180
18  117 180 94  191
19  89  188 104 199
20  175 197 107 213

我想使用ggplot在x轴上创建一个带pos(位置)的折线图。我试图用一种颜色显示gtt1gtt2行,用另一种颜色显示ftp1ftp2,因为它们是样本的单独组(gtt和ftp)。我已成功创建了图形,但所有四条线都有不同的颜色。我想在传奇中只保留gtt和ftp(不是全部四个)。奖金,我怎么能让这些线条变得平滑。

这是我到目前为止所做的:

library(reshape2);library(ggplot2)
data <- read.table("myfile.txt",header=TRUE,sep="\t")
data.melt <- melt(data,id="pos")
ggplot(data.melt,aes(x=pos, y=value,colour=variable))+geom_line()

提前致谢

1 个答案:

答案 0 :(得分:2)

最简单的方法是以稍微不同的方式重新整形数据:

dd1 = melt(dd[,1:3], id=c("pos"))
dd1$type = "gtt"
dd2 = melt(dd[,c(1, 4:5)], id=c("pos"))
dd2$type = "ftp"
dd.melt = rbind(dd1, dd2)

现在我们有一个列指定变量“type”:

R> head(dd.melt, 2)
  pos variable value type
1   8     gtt1   100  gtt
2   9     gtt1    85  gtt

一旦数据采用这种格式,ggplot命令就很简单:

ggplot(dd.melt,aes(x=pos, y=value))+ 
  geom_line(aes(colour=type, group=variable)) + 
  scale_colour_manual(values=c(gtt="blue", ftp="red"))

您可以使用stat_smooth添加平滑线条:

 ##span controls the smoothing
 g  + stat_smooth(se=FALSE, span=0.5)