使用'directlabels'包标记选择曲线

时间:2014-09-25 03:12:01

标签: r plot ggplot2

我有一个适合非线性模型的数据集。随后将数据和模型绘制在' R'使用包' ggplot2',这样数据和模型占用相同的ggplot。已针对一系列不同(自由)参数值绘制模型,并且我希望根据生成它们的参数值来标记每条结果曲线。但是,当我使用'直接标签'为了做到这一点,我最终标记了模型曲线以及原始数据。

为了更简单地说明这个问题我已经创建了以下代码来生成三条标记曲线,我想知道是否有一种方法可以标记三条曲线中的两条(或一条)。我使用ggplot2是一个很新的东西,所以我完全有可能误用了ggplot'或'直接标签'。我们非常感谢您提供的任何帮助。

代码如下:

    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 个答案:

答案 0 :(得分:1)

我不知道是否有一种不那么笨重的方式,但一种解决方案是将不相关的标签更改为NA,将其保存到新变量并绘制它。

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

这只给我标签2和4,而0(红线)仍未标记。