2014-09-19 14 views
12

Ho un set di dati denominato "unito", che contiene 3 colonne numeriche "pauseMedian" e "numTotalPauses" e "diff". Ho anche un set di dati splineHull, che contiene anche colonne numeriche "pauseMedian" e "numTotalPauses", più un fattore di 6 livelli "microstyle"Errore ggplot2: Valore discreto fornito a scala continua

Ho il seguente codice, che funziona perfettamente. Traccia un plop scatter e quindi lo sovrappone a poligoni spline di scafo colorati secondo "microstyle".

Script 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) 

Poi, voglio anche cambiare il colore dei punti del grafico a dispersione con l'aggiunta di un solo attributo color = diff.

sceneggiatura 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) 

vedo il seguente errore:

Error: Discrete value supplied to continuous scale 

Non so il motivo per cui io vedo questo errore. Se voglio ancora il grafico a dispersione colorata ma non i poligoni, eseguo il seguente codice e funziona di nuovo.

Script 3:

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

Allora, che cosa è accaduto con sceneggiatura 2, dove è l'errore, e come posso farlo funzionare?

+0

Sembra strano: è difficile individuare l'errore senza visualizzare i dati di esempio. Inoltre, hai provato a spostare 'color = diff' in' geom_point (aes (color = diff)) '? –

+0

@ SeñorO Ciao, sì, l'ho provato. Ha dato lo stesso errore. Nello script 2, ci sono due attributi di colore, uno in ggplot aes, l'altro in geom_polygon aes. Al primo viene assegnato un valore numerico "diff", a quest'ultimo viene assegnato un valore fattore "microstyle". Immagino, forse ggplot non può gestire un colore numerico e un fattore di colore allo stesso tempo? – nan

+0

In realtà potrebbe essere corretto ora che ci penso - perché è necessario creare una legenda per il colore. Prova a utilizzare 'fill = microstyle' per il poligono –

risposta

15

Evidentemente, non si può avere un'estetica di colore diversa per due diverse geom. Per ovviare al problema, utilizza invece un'estetica di riempimento per i punti. Ciò significa che è necessario utilizzare uno stile di marcatore di punti con interni pieni (vedere ?pch e scorrere verso il basso per gli stili punto disponibili). Ecco un modo per farlo:

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) 

Aggiunta colour=NA (al di fuori di aes()), si libera del bordo nero di default intorno ai marcatori punto. Se vuoi un bordo colorato attorno ai punti, cambia semplicemente colour=NA in qualsiasi colore tu preferisca.

Vedere anche this thread dal gruppo ggplot2 Google, discutendo di un problema simile e alcuni soluzioni alternative.

3

Ora che sappiamo che le due varianti di colore sono di tipi diversi, c'è il problema. Si può provare a utilizzare una scala diversa per una (ad esempio riempire invece di colore)

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

Se si deve usare la stessa scala (colore), e può 't convertire le variabili nello stesso tipo, vedere questo per maggiori informazioni: Plotting continuous and discrete series in ggplot with facet

+0

Ciao, ho un dataset molto grande, quindi è difficile pubblicare i dati qui. alfa dovrebbe essere maggiore di 0, ma non è il problema, e ho solo bisogno di contornare il poligono non riempito, perché la trama semplicemente non appare a causa dell'errore. Ho provato la tua soluzione ma ho avuto lo stesso errore. Per il colore specificato in geom_point, è una variabile numerica "diff", quella specificata in geom_polygon è un "fattore" discreto. Sto solo indovinando che ggplot non funziona se gli attributi di colore sono assegnati con tipi diversi. – nan

+0

Oh, beh questo è il pezzo chiave delle informazioni mancanti. Vedi la nuova soluzione – arvi1000

+0

Ciao, grazie. Sì, funziona in questo modo. In realtà preferisco ancora il colore, perché voglio avere solo il contorno (poligoni vuoti). Ad ogni modo, questa soluzione funziona per ora. Grazie! – nan

1

Solo per aggiungere qualcosa alla risposta eipi10 preferita sopra (grazie per questo !!). L'opzione color = "NA" per eliminare il bordo attorno alla forma del cerchio (pch = 21) deve essere compresa tra "". Se si utilizza il colore = NA (senza le virgolette), l'intera forma scompare e non viene tracciata. Avrei solo commentato la risposta ma non ho ancora una reputazione per questo :)

Problemi correlati