2014-09-25 28 views
3

我有一個數據集,我已經擬合了一個非線性模型。數據和模型隨後使用包「ggplot2」在'R'中繪製,使得數據和模型佔據相同的ggplot。該模型已繪製爲一系列不同的(自由)參數值,我希望根據哪個參數值生成它們來標記每個結果曲線。但是,當我使用'直接標籤'包來做到這一點時,我最終會標記模型曲線以及原始數據。使用'directlabels'包來標記選擇曲線

爲了更簡單地說明這個問題,我創建了下面的代碼,生成三條標籤曲線,我想知道是否有一種方法可以將三個標籤中的兩個(或一個)標記出來。我對使用ggplot2很新,所以我濫用'ggplot'或'directlabels'是完全可能的。任何幫助,你可以提供將不勝感激。

代碼如下:

require("ggplot2") 
    require("reshape2") 
    require("directlabels") 

    # Test function 
    f <- function(x,y){ 
    x^2 + y^2 
    } 

    # Define range of values for each variable 
    X <- seq(-4,4,0.1) 
    Y <- seq(0,4,2) 

    ## Label all curves: 
    # Create data frame 
    M <- lapply(Y, f, X) 
    names(M) = Y 

    M <- melt(M, id.vars = "Y") 
    M <- cbind(M,X) 
    names(M) = c("value", "Y", "X") 

    # Plot (x, f(x,y)) for each value of y. 
    p <- ggplot(M, aes(x = X, y = M$value)) + 
    geom_line(aes(y = M$value, color = M$Y), group = M$Y) 
    p <- p + geom_dl(aes(label = M$Y), method = "top.bumpup") 
    p 

回答

1

我不知道是否有一個不太笨重的方式,而是一個解決方案是不相關的標籤更改爲NA,將其保存到一個新的變量,繪製它。

newvar <- ifelse(M$Y == 0, NA, M$Y) 
p + geom_dl(aes(label = newvar), method = "top.bumpup") 

這給我只有標籤2和4,而0(紅線)仍然未標籤。

+0

它的作品,它很好地擴大到我原來的問題。謝謝! – frank2165 2014-09-26 06:15:40