2014-09-19 9 views
12

Ich habe eine Datenmenge namens "fusioniert", die 3 numerische Spalten "pauseMedian" und "numTotalPause" und "diff" enthält. Ich habe auch einen splineHull-Datensatz, der auch numerische Spalten "pauseMedian" und "numTotalPause" plus einen 6-Level-Faktor "microstyle" enthältggplot2 Fehler: Diskreter Wert an kontinuierliche Skala

Ich habe den folgenden Code, der perfekt funktioniert. Er zeichnet einen Streuplot und überlagert ihn dann mit SplineHull-Polygonen, die nach "Microstyle" gefärbt sind.

Skript 1:

ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses)) 
     + geom_point() 
     + geom_polygon(data = splineHull, 
         mapping=aes(x=pauseMedian, 
            y=numTotalPauses, 
            group=microstyle, 
            color = microstyle), 
         alpha=0) 

Dann möchte ich auch durch das Hinzufügen nur ein Attribut color = diff die Farbe der Punkte im Streudiagramm ändern.

Skript 2:

ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses, color = diff)) 
     + geom_point() 
     + geom_polygon(data = splineHull, 
         mapping=aes(x=pauseMedian, 
            y=numTotalPauses, 
            group=microstyle, 
            color = microstyle), 
         alpha=0) 

Ich sehe die folgenden Fehler:

Error: Discrete value supplied to continuous scale 

Ich weiß nicht, warum ich diesen Fehler zu sehen. Wenn ich immer noch ein farbiges Streudiagramm haben möchte, aber keine Polygone, führe ich den folgenden Code aus, es funktioniert wieder.

Skript 3:

ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses, color = diff)) 
     + geom_point() 

Also, was mit Skript passiert 2, wo ist der Fehler aus, und wie kann ich es funktioniert?

+0

Das scheint seltsam - es ist schwer, den Fehler zu lokalisieren, ohne Beispieldaten zu sehen. Haben Sie auch versucht, 'color = diff 'in' geom_point (aes (color = diff)) zu verschieben ''? –

+0

@ SeñorO Hallo, ja das habe ich probiert. Es gab denselben Fehler. In Skript 2 gibt es zwei Farbattribute, eines im ggplot aes, das andere im geom_polygon aes. Ersterer erhält einen numerischen Wert "diff", letzterer einen Faktorwert "microstyle". Ich schätze, vielleicht kann ggplot nicht gleichzeitig mit einer numerischen Farbe und einer Faktorfarbe umgehen? – nan

+0

Eigentlich mag das jetzt richtig sein, dass ich darüber nachdenke - weil es eine Legende für die Farbe machen muss. Verwenden Sie 'fill = microstyle' für das Polygon –

Antwort

15

Offensichtlich können Sie keine andere Farbästhetik verwenden zwei verschiedene Geome. Um dieses Problem zu umgehen, verwenden Sie stattdessen eine Füllmethode für die Punkte. Dies bedeutet, dass Sie einen Punktmarkierungsstil verwenden müssen, der ein gefülltes Inneres enthält (siehe ?pch und scrollen Sie nach unten für die verfügbaren Punktstile). Hier ist ein Weg, das zu tun:

ggplot() + 
    geom_point(data=merged,aes(x = pauseMedian, y = numTotalPauses, fill = diff), 
      pch=21, size=5, colour=NA) + 
    geom_polygon(data = splineHull, 
       mapping=aes(x=pauseMedian, 
          y=numTotalPauses, 
          colour = microstyle), 
       alpha=0) 

colour=NA Hinzufügen (außerhalb von aes()), entledigt sich der Standard-schwarzen Rand um den Punktmarken. Wenn Sie eine farbige Umrandung der Punkte wünschen, ändern Sie einfach colour=NA in die von Ihnen bevorzugte Farbe.

Siehe auch this thread aus der ggplot2 Google-Gruppe, ein ähnliches Problem und einige Problemumgehungen zu diskutieren.

3

Jetzt, da wir wissen, dass die zwei Farbe vars von verschiedenen Typen sind, gibt es das Problem. Sie können versuchen, einen anderen Maßstab für ein (zB füllen statt Farbe)

set.seed(123) 
my_df1 <- data.frame(a=rnorm(100), b=runif(100), c=rep(1:10, 10)) 
my_df2 <- data.frame(a=rnorm(100), b=runif(100), c=factor(rep(LETTERS[1:5], 20))) 

# this won't work. can't assign discrete and continuous to same scale 
ggplot() + 
    geom_point(data=my_df1, aes(x=a, y=b, color=c)) + 
    geom_polygon(data=my_df2, aes(x=a, y=b, color=c), alpha=0.5) 

Error: Discrete value supplied to continuous scale

# but use fill for polygons, and that works: 
ggplot() + 
    geom_point(data=my_df1, aes(x=a, y=b, color=c)) + 
    geom_polygon(data=my_df2, aes(x=a, y=b, fill=c), alpha=0.5) 

plot output

Wenn Sie die gleiche Skala (Farbe) verwenden, und kann Konvertieren Sie die Variablen nicht in den gleichen Typ. Weitere Informationen hierzu finden Sie unter Plotting continuous and discrete series in ggplot with facet

+0

Hallo, ich habe einen sehr großen Datensatz, daher ist es schwierig, die Daten hier zu posten. Alpha sollte mehr als 0 sein, aber es ist nicht das Problem, und ich muss nur ein nicht gefülltes Polygon konturieren, weil das Diagramm aufgrund des Fehlers einfach nicht angezeigt wird. Ich habe versucht, Ihre Lösung, aber ich habe den gleichen Fehler. Für die in geom_point angegebene Farbe ist es eine numerische Variable "diff", die in geom_polygon angegebene ist ein diskreter "Faktor". Ich rate nur, ggplot funktioniert nicht, wenn Farbattribute mit verschiedenen Typen zugewiesen sind. – nan

+0

Oh, nun, das ist der Schlüssel zu fehlenden Informationen. Siehe neue Lösung – arvi1000

+0

Hallo, danke. Ja, es funktioniert so. Eigentlich bevorzuge ich noch Farbe, weil ich nur die Kontur haben möchte (leere Polygone). Wie auch immer, diese Lösung funktioniert jetzt. Vielen Dank! – nan

1

Nur um etwas zur bevorzugten Antwort von epii10 hinzuzufügen (danke dafür!). Die Option color = "NA", um den Rand um die Kreisform (pch = 21) zu entfernen, muss zwischen "" liegen. Wenn Sie Farbe = NA (ohne die Anführungszeichen) verwenden, verschwindet die gesamte Form und wird nicht geplottet. Ich hätte nur auf die Antwort kommentiert, aber ich habe immer noch keinen Ruf dafür :)

Verwandte Themen