2014-04-30 91 views
1

我有一個3列的數據框。我正在用一個數字變量(Prob)繪製一個因子(X)。我想從每個點到y = 0線劃一條線。在閱讀這篇文章R ggplot vertical and horizontal line intercept at center後,我試着用下面的代碼來做到這一點。結果不是我所期望的。我認爲這可能與我的x軸變量是一個因素有關。有沒有更好的方法可以做到這一點?R ggplot2畫線從點到y = 0

pmf.data = as.data.frame(c(0,1,2,"NA")) 
    pmf.data$Prob = c(0.4921875, 0.015625, 0.4921875, 0) 
    colnames(pmf.data)[1] = c("X") 
    pmf.data$label = c("P0", "P1", "P2", "PNA") 

    ggplot(data=pmf.data, aes(x=X, y=Prob)) + geom_point() + 
     geom_text(aes(label = label), hjust = 2) + 
     geom_segment(aes(xend=Prob, yend=0), color="blue") + 
     ylab(expression(bold(paste(f[(X)](x))))) + 
     ggtitle("Multinomial pdf for X") 
+0

這聽起來像你正在創建一個臨時條形圖,你確定你不想只使用geom_bar()? http://docs.ggplot2.org/0.9.3.1/geom_bar.html – andrew

回答

3

如果需要的垂直線即變爲Y = 0,則geom_segment()內部xend=值應相同x值 - 即 - X

ggplot(data=pmf.data, aes(x=X, y=Prob)) + geom_point() + 
    geom_text(aes(label = label), hjust = 2) + 
    geom_segment(aes(xend=X, yend=0), color="blue") + 
    ylab(expression(bold(paste(f[(X)](x))))) + 
    ggtitle("Multinomial pdf for X") 

geom_segment()同樣的效果可以與geom_bar()和設置width=一些低的值atchieved。

ggplot(data=pmf.data, aes(x=X, y=Prob))+geom_bar(stat="identity",width=0.01)