2013-10-15 12 views
5

Ich habe einen Datensatz, den ich verwendet habe, um ein Streudiagramm zu erstellen, und ich möchte den Datenpunkten in drei verschiedenen Regionen basierend auf ihrem x drei verschiedene Farben zuweisen Werte.Bedingte Anweisungen verwenden, um die Farbe der Datenpunkte zu ändern

Datenpunkte mit x-Werten < 3 möchte ich rot

Datenpunkte mit x-Werten (3,1549) Ich möchte erscheinen schwarz

Datenpunkte mit x-Werten> 1549 Ich möchte erscheinen erscheint lila

Hier ist mein Code für das Scatterplot und die ersten beiden Parameter, wie kann ich den dritten Parameter implementieren, so dass die Daten der letzten Region lila werden?

plot(x, y, xlab="chr X position (Mb)", 
      ylab="Diversity", 
      pch=16, cex =0.7, 
      col = ifelse(x < 3,'red','black'))  

enter image description here

Antwort

6

Verwenden Sie einfach verschachtelte ifelse s:

plot(...., col=ifelse(x < 3, "red", ifelse(x > 1549, "purple", "black"))) 
3

Sie können einen Vektor von Farben definieren und an die col Argument von plot passieren. Etwas wie folgt aus:

colors <- rep("black", length(x)) 
colors[x<3] <- "red" 
colors[x>1549] <- "pink" 

plot(x, y, xlab="chr X position (Mb)", 
      ylab="Diversity", 
      pch=16, cex =0.7, 
      col = colors)  
+0

Das war sehr hilfreich für mich. Danke :) – AbhinavVinay

3

Ich mag die cut Ansatz:

set.seed(1) 
x <- sample(1600) 
col <- c("red", "black", "purple") 
col <- col[cut(x, breaks=c(-Inf, 3, 1549, Inf))] 
4

Auch die "klassischen" findInterval:

col = c("red", "black", "purple")[findInterval(x, v = c(0,3,1549))]

+0

Das ist sogar besser als 'schneiden'! Danke fürs Zeigen. – sgibb

Verwandte Themen