wake-up-neo.net

Wie kann man jeder Klasse im Punktdiagramm in R Farbe geben?

In einem Datensatz möchte ich zwei Attribute annehmen und ein überwachtes Streudiagramm erstellen. Weiß jemand, wie man jeder Klasse eine andere Farbe gibt? 

Ich versuche, col == c("red","blue","yellow") im plot-Befehl zu verwenden, aber ich bin mir nicht sicher, ob es richtig ist, als würde ich eine weitere Farbe hinzufügen. Diese Farbe kommt auch in das Scatterplot, obwohl ich nur 3 Klassen habe.

Vielen Dank

40
Pallavi

Hier ist eine Lösung, die traditionelle Grafiken (und die Daten von Dirk) verwendet:

> DF <- data.frame(x=1:10, y=rnorm(10)+5, z=sample(letters[1:3], 10, replace=TRUE)) 
> DF
    x        y z
1   1 6.628380 c
2   2 6.403279 b
3   3 6.708716 a
4   4 7.011677 c
5   5 6.363794 a
6   6 5.912945 b
7   7 2.996335 a
8   8 5.242786 c
9   9 4.455582 c
10 10 4.362427 a
> attach(DF); plot(x, y, col=c("red","blue","green")[z]); detach(DF)

Dies hängt von der Tatsache ab, dass DF$z ein Faktor ist. Wenn also ein Teil davon subset wird, werden seine Werte als Ganzzahlen behandelt. So variieren die Elemente des Farbvektors mit z wie folgt:

> c("red","blue","green")[DF$z]
 [1] "green" "blue"  "red"   "green" "red"   "blue"  "red"   "green" "green" "red"    

Sie können eine Legende mit der Funktion legend hinzufügen:

legend(x="topright", legend = levels(DF$z), col=c("red","blue","green"), pch=1)
57
Aniko

Hier ist ein Beispiel, das ich basierend auf dieser Seite erstellt habe.

library(e1071); library(ggplot2)

mysvm      <- svm(Species ~ ., iris)
Predicted  <- predict(mysvm, iris)

mydf = cbind(iris, Predicted)
qplot(Petal.Length, Petal.Width, colour = Species, shape = Predicted, 
   data = iris)

Dies gibt Ihnen die Ausgabe. Sie können leicht die falsch klassifizierten Arten anhand dieser Abbildung erkennen.

enter image description here

14
Ramnath

Eine Möglichkeit ist, das Gitterpaket und xyplot () zu verwenden:

R> DF <- data.frame(x=1:10, y=rnorm(10)+5, 
+>                  z=sample(letters[1:3], 10, replace=TRUE))
R> DF
    x       y z
1   1 3.91191 c
2   2 4.57506 a
3   3 3.16771 b
4   4 5.37539 c
5   5 4.99113 c
6   6 5.41421 a
7   7 6.68071 b
8   8 5.58991 c
9   9 5.03851 a
10 10 4.59293 b
R> with(DF, xyplot(y ~ x, group=z))

Durch Angabe expliziter Gruppierungsinformationen über die Variable z erhalten Sie unterschiedliche Farben. Sie können Farben angeben usw., siehe die Dokumentation des Gitters.

Da z hier eine Faktorvariable ist, für die wir die Stufen (== numerische Indizes) erhalten, können Sie dies auch tun 

R> with(DF, plot(x, y, col=z))

aber das ist weniger transparent (für mich zumindest :) dann xyplot() et al.

9

Wenn Sie die Klassen in einem Datenrahmen oder einer Matrix getrennt haben, können Sie matplot verwenden. Zum Beispiel, wenn wir haben

dat<-as.data.frame(cbind(c(1,2,5,7),c(2.1,4.2,-0.5,1),c(9,3,6,2.718)))

plot.new()
plot.window(c(0,nrow(dat)),range(dat))
matplot(dat,col=c("red","blue","yellow"),pch=20)

Dann erhalten Sie ein Scatterplot, in dem die erste Spalte von dat rot, die zweite blau und die dritte gelb markiert ist. Wenn Sie für Ihre Farbklassen getrennte x- und y-Werte wünschen, können Sie datx und daty usw. verwenden.

Ein alternativer Ansatz wäre, eine zusätzliche Spalte anzuführen und anzugeben, welche Farbe Sie möchten (oder einen zusätzlichen Farbvektor beibehalten und ihn mit einer for-Schleife und einigen if-Zweigen iterativ füllen). Zum Beispiel erhalten Sie dieselbe Darstellung:

dat<-as.data.frame(
    cbind(c(1,2,5,7,2.1,4.2,-0.5,1,9,3,6,2.718)
    ,c(rep("red",4),rep("blue",4),rep("yellow",4))))

dat[,1]=as.numeric(dat[,1]) #This is necessary because
                            #the second column consisting of strings confuses R
                            #into thinking that the first column must consist of strings, too
plot(dat[,1],pch=20,col=dat[,2])
2
user554546

Angenommen, die Klassenvariable ist z, können Sie Folgendes verwenden: 

with(df, plot(x, y, col = z))

es ist jedoch wichtig, dass z eine Faktorvariable ist, da R intern Faktoren als Ganzzahlen speichert. 

Auf diese Weise ist 1 "schwarz", 2 ist "rot", 3 ist "grün".

0
heschmat

So mache ich es 2018. Wer weiß, vielleicht wird es ein R-Neuling eines Tages sehen und sich in ggplot2 verlieben.

library(ggplot2)

ggplot(data = iris, aes(Petal.Length, Petal.Width, color = Species)) +
  geom_point() +
  scale_color_manual(values = c("setosa" = "red", "versicolor" = "blue", "virginica" = "yellow"))
0
Ozan147