2015-10-22 169 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