2014-01-11 57 views
1

幾周前我開始與R合作,這是我找不到答案的第一個問題。這是我想在一個路徑圖做節目的數據的一個簡單的例子:如何繪製(x,y)點中的點之間的路徑圖 - 逐步而不是直線?

library(ggplot2) 

x = c(1, 3, 6, 8, 9, 4, 6, 8, 12) 

y = c(3, 7, 12, 14, 18, 23, 24, 30, 34) 

p = qplot(x, y) + geom_path() 

print(p) 

我的問題是行之間的對角連接。我想逐步連接它們,因此首先移動水平然後垂直移動(或者反過來)。我找到了geom_step,但是我沒有能夠逐步繪製路徑

如果有人能幫助 - 這將是非常好的!

回答

2

使用geom_step:OP評論後

qplot(x, y) + geom_step() 

編輯

我不認爲有你想要的是什麼GGPLOT2 GEOM,但這裏的手動解決方案,我插入每兩個現有點之間的點數。解決方案沒有完成(應該照顧一個或兩個特定情況),但這是一個好的開始,並且可以輕鬆生成以創建自己的寶石。

dat <- data.frame(x=x,y=y) 
rownames(dat) <- paste0(seq_len(nrow(dat)),'x') 
res <- t(sapply(seq_len(nrow(dat)-1),function(x){ 
    row1 = dat[x,] 
    row2 = dat[x+1,] 

    if (row1[1]>row2[1]) 
    c(x=min(row1[1],row2[1]), 
     y = min(row1[2],row2[2])) 
    else 
    c(x=max(row1[1],row2[1]), 
     y = min(row1[2],row2[2])) 
})) 
rownames(res) <- paste0(seq_len(nrow(res)),'y') 

dat <- rbind.data.frame(dat,res) 

dat <- dat[mixedorder(rownames(dat)),] 
ggplot(dat) + geom_path(aes(x=x,y=y)) 

enter image description here

+1

感謝您的建議,但geom_step()不會產生所需的結果。 geom_step將圖表中的所有點從左到右連接(與geom_line相同)。但我需要一種方式來按照它們在數據集中呈現的順序(如geom_path)連接點 - 但這是逐步的。 – user3184906

+0

@ user3184906我明白你的觀點!我編輯了我以前的答案。 – agstudy

0

謝謝您的建議。這有助於爲我找到最佳解決方案。這是我的問題最終溶液:

D.1 < - data.frame(X = X,Y = Y)

rownames(D.1)< - paste0(seq_len(nrow( D.1)), 'X')

YT < - Y [-length(Y)]

XT < - X [-1]

D.2 < - data.frame( x = xt,y = yt)

rownames(D.2)< - paste0(seq_len(nrow(D.2)), 'Y')

d < - rbind.data.frame(D.1,D.2)

d < - d [mixedorder(rownames(d)),]

ggplot(d)+ geom_path(AES(X = X,Y = Y))

相關問題