Vraag Kleur één punt en voeg een annotatie toe in ggplot2?


Ik heb een dataframe a met drie kolommen:

GeneName, Index1, Index2

Ik teken een spreidingsdiagram zoals deze

ggplot(a, aes(log10(Index1+1), Index2)) +geom_point(alpha=1/5)

Dan wil ik een punt inkleuren waarvan GeneName is "G1" en voeg een tekstvak toe in de buurt van dat punt, wat is misschien de gemakkelijkste manier om het te doen?


15
2018-01-16 04:54


oorsprong


antwoorden:


Zoiets zou moeten werken. Misschien moet je rommelen met de x en y argumenten voor geom_text().

library(ggplot2)

highlight.gene <- "G1"

set.seed(23456)
a <- data.frame(GeneName = paste("G", 1:10, sep = ""),
                   Index1 = runif(10, 100, 200),
                   Index2 = runif(10, 100, 150))

a$highlight <- ifelse(a$GeneName == highlight.gene, "highlight", "normal")
textdf <- a[a$GeneName == highlight.gene, ]
mycolours <- c("highlight" = "red", "normal" = "grey50")

a
textdf

ggplot(data = a, aes(x = Index1, y = Index2)) +
    geom_point(size = 3, aes(colour = highlight)) +
    scale_color_manual("Status", values = mycolours) +
    geom_text(data = textdf, aes(x = Index1 * 1.05, y = Index2, label = "my label")) +
    theme(legend.position = "none") +
    theme()

screenshot


17
2018-01-16 05:16



U kunt een subset maken die precies dat punt bevat en deze vervolgens aan de plot toevoegen:

# create the subset
g1 <- subset(a, GeneName == "G1")

# plot the data
ggplot(a, aes(log10(Index1+1), Index2)) + geom_point(alpha=1/5) +  # this is the base plot
  geom_point(data=g1, colour="red") +  # this adds a red point
  geom_text(data=g1, label="G1", vjust=1) # this adds a label for the red point

OPMERKING: aangezien iedereen deze vraag blijft beantwoorden, dacht ik dat ik het gemakkelijker zou maken om te lezen.


42
2018-01-16 05:02