2012-01-31 230 views
6

我正試圖在使用ggplot vline和hline的線圖上顯示一個截距,但是希望線路在圖上的截取點處停止。這可能無論是在ggplot還是有另一種解決方案有沒有辦法限制ggplot2中的vline長度

library(ggplot2) 

pshare <- data.frame() 

for (i in 1:365) { 
    pshare <- rbind(pshare,c(i, pbirthday(i,365,coincident=3))) 
} 

names(pshare) <- c("number","probability") 

x25 <- qbirthday(prob = 0.25, classes = 365, coincident = 3) #61 
x50 <- qbirthday(prob = 0.50, classes = 365, coincident = 3) 
x75 <- qbirthday(prob = 0.75, classes = 365, coincident = 3) 

p <- qplot(number,probability,data=subset(pshare,probability<0.99)) 

p <- p + geom_vline(xintercept = c(x25,x50,x75)) 
p <- p + geom_hline(yintercept = c(0.25,0.5,0.75)) 
p 

因此,舉例來說,我想0.25/61線結束時,他們對劇情

TIA

+7

使用'geom_segment'代替,與'Inf'或'-Inf'到盤區強制到邊界在另一個方向上。 – joran 2012-01-31 18:50:55

+0

@joran聽起來對我來說是一個很好的答案!爲什麼不把它作爲答案? – Justin 2012-01-31 19:17:46

+0

@Justin因爲我試圖在完成工作的同時養活我的修補程序,所以我很滿意用一個可能的答案對問題進行「種子」,並將細節留給其他人。 – joran 2012-01-31 19:31:17

回答

17

擴大滿足以@joran評論爲一個答案和例子

geom_vline繪製整個陰謀;這是它的目的。 geom_segment只會在特定的終點之間繪製。它有助於使用相關信息製作一個數據框來繪製線條。

probs <- c(0.25, 0.50, 0.75) 
marks <- data.frame(probability = probs, 
        number = sapply(probs, qbirthday, classes=365, coincident=3)) 

通過這種方式,使線條僅進入交叉點更容易。

qplot(number,probability,data=subset(pshare,probability<0.99)) + 
    geom_segment(data=marks, aes(xend=-Inf, yend=probability)) + 
    geom_segment(data=marks, aes(xend=number, yend=-Inf)) 

enter image description here

+0

謝謝。 v優雅 – pssguy 2012-01-31 22:28:19

相關問題