Search code examples
rggplot2direct-labels

Selecting factor for labels (ggplot2, directlabels)


I'd like to use the package directlabels to label my plot. However, I'd like the label to be the ID of each point. Is there really no way to select which factor to label or did I miss that?

library(ggplot2)
library(directlabels)
df <- structure(
    list(id = 1:10,
         group = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
         .Label = c("A", "B"),
         class = "factor"),
         value1 = c(4, 1, 6, 2, 5, 7, 3, 2, 5, 8),
         value2 = c(6, 2, 6, 2, 8, 9, 7, 5, 2, 6)
         ),
.Names = c("id", "group", "value1", "value2"),
row.names = c(NA, -10L),
class = "data.frame")

p1 <- ggplot(df, aes(x=value1, y=value2)) + geom_point(aes(colour=group))
direct.label(p1)

enter image description here


Solution

  • Inspecting the code of direct.label.ggplot() shows that geom_dl() is called in the end. This function expects an aesthetic mapping and a positioning method. The positioning method used by default is the return value of default.picker("ggplot"), which uses call stack examination and in your case is equivalent to calling defaultpf.ggplot("point",,,). The following works for me:

    p1 <- ggplot(df, aes(x=value1, y=value2)) +
      geom_point(aes(colour=group)) +
      geom_dl(aes(label = id), method = defaultpf.ggplot("point",,,))
    p1
    

    Plot

    (Note that you don't need to call direct.label() anymore.)

    The documentation of the directlabels package is indeed a bit scarce.