2015-12-13 19 views
1

我想圖表一些數據隨時間組的手段,具有連接所述不同的平均時間點每個組線。y軸的GGPLOT2數標度造成彎曲線

的代碼是這樣的:

line<-ggplot(dat, aes(Time, Cortisol.ngmL, shape=T)) 

line+ 
stat_summary(fun.y=mean, geom="point", size=4, aes(group=T))+ 
stat_summary(fun.y=mean, geom="line", aes(group=T), linetype="dashed", lwd=0.7) 

但是......我想記錄(LOG10)y軸。當我做連接組跨越時間這行變得彎曲(下面的代碼)

line<-ggplot(dat, aes(Time, Cortisol.ngmL, shape=T)) 

line+ 
stat_summary(fun.y=mean, geom="point", size=4, aes(group=T))+ 
stat_summary(fun.y=mean, geom="line", aes(group=T), linetype="dashed", lwd=0.7)+ 
coord_trans(y="log10") 

有誰知道一個方法可以讓我有一個日誌規模和直線?

+0

我們看不到你的數據,所以不知道它是什麼樣子,很難給出一個確切的答案。我最好的猜測是圖表是正確的。 對數刻度,數據需要遵循指數曲線是直的。也許你的數據不是指數? –

+0

這是一個有趣的問題 - 如何繪製兩點之間的直線在對數軸上。 下面是我如何用一個具體的例子做到這一點,但我完全不知道如何對任何兩點進行概括。 紅線是直上正常規模。藍線一直盯着對數尺度。 'library(ggplot2); X < - SEQ(從= 1到= 10,由= 0.1); geom_line(aes(x =(9/log10(10))* log10(x)+ 1,y(x) = x),color =「blue」)+ coord_trans(y =「log10」)' 不知道如何推廣任何兩點 – Mist

回答

1

我用這個功能來分用直線數刻度連接:

log_line <- function(x, y, n = 1000) { 
    l <- lapply(2:length(x), 
       function(i, n) { 
       xl <- seq(x[i - 1], x[i], (x[i] - x[i - 1])/n) 
       yl <- exp(log(y[i]) + (xl - x[i]) * (log(y[i]) - log(y[i - 1]))/(x[i] - x[i - 1])) 
       return(data.frame(x = xl, y = yl)) 
       }, 
       n) 

    return(do.call(rbind, l)) 
} 

的參數是要與對數座標的直線和n連接點的X和Y座標您希望在每對原始點之間預測的點數。

此功能適合對數尺度每個點之間的直線,原來的兩個點之間的預測N個新點,比它們轉換回到原來的規模。輸出是具有預測值x和y座標的數據幀。

它可以方便地添加到ggplot:

v1 <- 1:10 
v2 <- exp(-v1) 

ggplot() + 
    geom_point(aes(v1, v2)) + 
    geom_line(aes(x, y), data = log_line(v1, v2)) + 
    coord_trans(y = "log")