2015-10-22 28 views
1

我正在绘制一个图上的多个系列数据。R ggplot多系列曲线

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

count_id AMV Hour duration_in_traffic AMV_norm 
1 16012E 4004 14 99 0 
2 16012E 4026 12 94 22 
3 16012E 4099 15 93 95 
4 16012E 4167 11 100 163 
5 16012E 4239 10 97 235 

我使用绘图在R:

ggplot(td_results, aes(AMV,duration_in_traffic)) + geom_line(aes(colour=count_id)) 

这是给我:

AMV versus Duration_in_traffic

然而,相当比直线连接点我想弯曲。

我发现了下面的问题,但得到了意想不到的结果。 Equivalent of curve() for ggplot

我用:ggplot(td_results, aes(AMV,duration_in_traffic)) + geom_line(aes(colour=count_id)) + stat_function(fun=sin)

因此给:

Plot using stat_function(fun=sin)

我怎样才能获得某种形式的高阶多项式的曲线?

+2

Exactl你想如何将你的离散点变成曲线?你想要适合一些统计模型吗?有许多方法可以“平滑”线条。你需要选择一个适合你的数据。如果你需要选择一个帮助,你可能希望参考[stats.se],因为这更像是一个统计问题,而不是一个编程问题。 – MrFlick

回答

1

正如@MrFlick在评论中提到的那样,有一些严重的统计方法可以获得曲线,这些方法在这里可能不是主题。

如果你只是想让你的图看起来更好看,你可以尝试插入你的数据spline,然后将它添加为另一层。

首先,我们做了一些花键的数据,使用10次,你有数据点(您可以根据需要增加或减少此)的数量:

library(dplyr) 
dat2 <- td_results %>% select(count_id, AMV, duration_in_traffic) %>% 
       group_by(count_id) %>% 
       do(as.data.frame(spline(x= .[["AMV"]], y= .[["duration_in_traffic"]], n = nrow(.)*10))) 

那我们的情节,使用原始的数据点,但是如果使用来自样条数据线(DAT2):

library(ggplot2) 
ggplot(td_results, aes(AMV, duration_in_traffic)) + 
    geom_point(aes(colour = factor(count_id))) + 
    geom_line(data = dat2, aes(x = x, y = y, colour = factor(count_id))) 

这让我从您的测试数据如下图: enter image description here