ggplot2-line绘图与TIME系列和多样条曲线

时间:2012-09-19 17:52:18

标签: r ggplot2 lines spline melt

这个问题的主题很简单,但让我发疯: 1.如何使用melt() 2.如何处理单个图像中的多行?

这是我的原始数据:

a   4.17125 41.33875    29.674375   8.551875    5.5
b   4.101875    29.49875    50.191875   13.780625   4.90375
c   3.1575  29.621875   78.411875   25.174375   7.8012

Q1: 我已经从这篇文章Plotting two variables as lines using ggplot2 on the same graph中学到了解如何为多变量绘制多行,就像这样: enter image description here

以下代码可以获得上述情节。但是,x轴确实是时间序列。

df <- read.delim("~/Desktop/df.b", header=F)
colnames(df)<-c("sample",0,15,30,60,120)
df2<-melt(df,id="sample")
ggplot(data = df2, aes(x=variable, y= value, group = sample, colour=sample)) + geom_line() + geom_point()

我希望它可以将 0 15 30 60 120视为实数来显示时间序列,而不是name_characteristics。即使尝试了这个,我也失败了。

row.names(df)<-df$sample
df<-df[,-1]
df<-as.matrix(df)
df2 <- data.frame(sample = factor(rep(row.names(df),each=5)), Time = factor(rep(c(0,15,30,60,120),3)),Values = c(df[1,],df[2,],df[3,]))
ggplot(data = df2, aes(x=Time, y= Values, group = sample, colour=sample)) 
        + geom_line() 
        + geom_point()

Loooooooooking您的帮助。

Q2: 我已经了解到以下脚本可以为单行添加spline()函数,我希望在单个图像中对所有三行应用spline()?

n <-10
d <- data.frame(x =1:n, y = rnorm(n))
ggplot(d,aes(x,y))+ geom_point()+geom_line(data=data.frame(spline(d, n=n*10)))

1 个答案:

答案 0 :(得分:3)

您的variable列是一个因素(您可以通过致电str(df2)进行验证)。只需将其转换回数字:

df2$variable <- as.numeric(as.character(df2$variable))

对于您的其他问题,您可能希望坚持使用geom_smoothstat_smooth,如下所示:

p <- ggplot(data = df2, aes(x=variable, y= value, group = sample, colour=sample)) + 
      geom_line() + 
      geom_point()

library(splines)
p + geom_smooth(aes(group = sample),method = "lm",formula = y~bs(x),se = FALSE)

给我这样的东西:

enter image description here