2014-05-14 10 views
8

Nella trama generata dal codice seguente vorrei modificare i colori in modo che tutti i valori < 0.6 siano gli stessi del colore "basso" e tutti i valori maggiori di 1 sono il colore "alto".R ggplot2 - Come specificare i valori dei limiti di fuori colore

Così com'è, il gradiente di colore si estende sull'intero intervallo numerico dei dati. Ho provato ad aggiungere limiti ma questo fa sì che tutti i valori fuori limite abbiano lo stesso colore dei valori NA, che non è quello che voglio perché ho bisogno di perdere i valori di NA per sporgere chiaramente e non apparire dello stesso colore dei valori fuori limite < 0.6.

Sono convinto che la risposta sia con la oob, rompe gli argomenti ma non ha avuto successo nel farlo funzionare.

library(ggplot2) 
a = rnorm(17*17, 0.733,0.21) 
qcMat = matrix(a, ncol = 17) 
qcMat[qcMat> 1] = 1 
#qcMat contains values between 0 and 1 and some NAs 

m = melt(t(qcMat)) 
m$Var2 <- with(m,factor(Var2, levels = rev(sort(unique(Var2))))) 
ggplot(m, aes(as.factor(Var1), Var2, group=Var2)) + 
    geom_tile(aes(fill = value)) + 
    geom_text(aes(fill = m$value, label = round(m$value, 2))) + 
    scale_fill_gradient(low = "red", high = "green") + 
    xlab("") + ylab("") + ggtitle(paste("biscuit:", biscuit_id, "- QC", sep = " ")) 
+0

Si scrive 'tutti i valori superiori a 1 sono il colore 'alta'' e ' qcMat contiene valori tra 0 e 1 e alcuni NA '. Perché usare 1 come limite quando non hai 1 nei tuoi dati? – Henrik

+0

@Henrik i dati generati per lo scopo di questo frammento di codice non riflettono fedelmente i dati reali su cui sto lavorando, ma sono piuttosto vicini. Inoltre ha riparato la rimozione di dishMat. – HoaxKey

risposta

14

Come si detto da te, vuoi l'argomento oob nello scale_fill_gradient. Per bloccare i valori, è possibile utilizzare squish from the scales package (scales è installato quando è installato ggplot2):

library(scales) 

e successivamente

scale_fill_gradient(low = "red", high = "green", limits=c(0.6, 1), oob=squish) 
+0

Brillante! Non avevo caricato il pacchetto di bilance, ma avevo provato questa soluzione esatta diversa da quella. Così vicino ma senza sigaro. Ciao Stefan! – HoaxKey

+0

Non capisco questo esempio. Dove si specifica il colore dei valori fuori intervallo? Questo rende solo i valori da non considerare come NA – GabrielMontenegro

0

Provare a cambiare geom_tile al di sotto:

geom_tile(aes(fill = ifelse(value<0.6,min(m$value,na.rm=TRUE), 
           ifelse(value>1,max(m$value,na.rm=TRUE), 
            value)))) 

EDIT: allora non usare min max, in modo che otterrà 0,6-1 gamma:

geom_tile(aes(fill = ifelse(value<0.6,0.6, 
          ifelse(value>1,1, 
            value)))) 
+0

Grazie a zx8754 questo è sicuramente un passo nella giusta direttrice, ma non proprio perfetto, ho aggiornato la mia domanda per riflettere il suggerimento e chiarito il nuovo problema che presenta. Saluti! – HoaxKey

+0

@HoaxKey risposta aggiornata. – zx8754

+0

Domanda aggiornata. Questo è ancora più vicino, ma non del tutto perfetto. Apprezzo molto il tuo aiuto con questo non credo che tu sia un utente Dogecoin che potrei dare una mancia? – HoaxKey

Problemi correlati