Sto riesaminando il problema che ho avuto circa un anno fa. Vorrei che la mia guida 'colourbar' fosse effettivamente visualizzata su una scala di log in modo che il take-away quando lo guardi è che i valori di blu sempre più scuri riflettono un significato maggiore.Ridimensiona/inserisci manualmente interruzioni sulla guida colorbar di geom_tile E sostituisci le etichette sull'asse y
Con questo codice, genero l'immagine qui sotto:
pz <- ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=c("#000066","#0000FF","#DDDDDD","white"),
values=c(0,0.05,0.050000000000001,1.0),
breaks=c(0, 0.000001, 0.01, 0.05, 1),
guide = "colourbar") +
theme_bw()+
theme(panel.background = element_blank(),
panel.border = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank()) +
theme(legend.position="top",
legend.text = element_text(angle=45),
axis.text.x = element_text(angle=45)
)
Oppure, posso visualizzarlo come una "leggenda" in contrapposizione ad un "COLOURBAR":
Ma quello che veramente desidero è qualcosa di simile:
01.235.164,106 milaHo provato ad aggiungere 'trans = "log"' (scale_fill_gradientn (trans = "log")), ma ci sono un sacco di zeri nel mio dati che causa un problema. Se avete qualche idea sarebbe molto apprezzato!
formulazione precedente:
Sto cercando di fare una mappa termica del p-value per i campioni differenti per le varie categorizzazioni. Ci sono due cose che vorrei modificare su questo terreno:
vorrei regolare la leggenda della mia
geom_tile
complotto per sottolineare l'estremità inferiore della scala leggenda pur mantenendo l'intero spettro del gradiente - simile a come sarebbe se fosse una scala di registro. Quindi, in sostanza, la transizione da bianco a blu da 1,0 a 0,05 e la transizione da blu a blu scuro da 0,05 a 0,00 saranno approssimativamente di dimensioni uguali. C'è un modo per regolare manualmente la guida colorbar?Vorrei sostituire i nomi dell'asse y in modo da poter rimuovere la mia etichetta di riga "vuota". Nota, le Categorie sono semplicemente rappresentate come lettere qui, ma nel mio vero set di dati sono nomi lunghi. Ho inserito righe "fittizie" di dati per suddividere le categorizzazioni in mandrini e ho ordinato che le tessere all'interno di ciascun blocco passassero dal più significativo a non significativo - Sono sicuro che c'è una soluzione migliore a questo, ma questo è quello che ho scoperto dopo molti tentativi falliti di altre idee che ho trovato nello stack overflow! Ho provato a etichettarli con
scale_y_discrete
, ma questo diventa confuso con l'ordine di cui sopra.
L'aiuto con entrambi questi problemi sarà molto apprezzato!
Ecco un set di dati campione:
dput(dat.m)
structure(list(Category = structure(c(12L, 11L, 10L, 9L, 8L,
7L, 6L, 5L, 4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L,
4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L,
1L), class = "factor", .Label = c("j", "i", "empty2", "h", "empty1",
"g", "f", "e", "d", "c", "b", "a")), variable = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L), .Label = c("b2", "c1", "c2"), class = "factor"),
value = c(7.40214650772221e-06, 0.0075828339, 0.1825924627,
0.0384381317, 0.0440256659, 0.3659284985, 0.9777569144, 1,
0.0075828339, 1, 0.2193606406, 0.3659284985, 0.0004289756,
0.0011541045, 0.0004289756, 0.4400885491, 0.6121402215, 0.6724032426,
0.2735924085, 1, 0.018824582, 1, 0.4386503891, 0.4249526456,
1.05094571578633e-05, 0.0027216795, 0.715979827, 0.0050376405,
0.7473334763, 0.9053300832, 1, 1, 0.0015392848, 1, 0.039679469,
0.0950327519)), .Names = c("Category", "variable", "value"
), row.names = c(NA, -36L), class = "data.frame")
E qui è il mio codice:
col_blue <- c("#FFFFFF","#000099","#000066","#000033")
ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0),guide="colorbar") +
theme_mary(base_size=12)
UPDATE:
Così ora ho modificato t codice in quanto tale con i seguenti risultati. Mi sto avvicinando a quello che spero di ottenere, ma mi piacerebbe giocare con le proporzioni della barra dei colori per mostrare il gradiente da 0,05 a 0,0 un po 'più chiaramente.
col_blue <- c("#FFFFFF","#000099","#000066","#000033")
ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0), guide=FALSE) +
scale_colour_gradientn(guide = "colourbar", limits = c(0,1),breaks=c(1,0.05,0.01,0),values=c(1,0.05,0.01,0),colours=c("#FFFFFF","#000099","#000066","#000033"))
da dove proviene 'theme_mary'? –
So che questo è un vecchio commento, ma poiché ho appena aggiornato la domanda qui è la risposta - theme_mary era un tema personalizzato che avevo precedentemente realizzato. L'ho rimosso dal codice aggiornato. Ci scusiamo per qualsiasi confusione! – ONeillMB1