Ho riscontrato un problema interessante con il ridimensionamento utilizzando ggplot. Ho un set di dati che posso tracciare bene usando la scala lineare di default, ma quando uso scale_y_log10() i numeri vanno via. Ecco alcuni esempi di codice e due immagini. Notare che il valore massimo nella scala lineare è ~ 700 mentre il ridimensionamento del registro ha un valore di 10^8. Ti mostro che l'intero set di dati è lungo solo ~ 8000 voci, quindi qualcosa non va bene.ggplot scale_y_log10() problema
Immagino che il problema abbia a che fare con la struttura del mio set di dati e il binning poiché non riesco a replicare questo errore su un set di dati comune come "diamanti". Tuttavia non sono sicuro che sia il modo migliore per risolvere i problemi.
grazie, Zach CP
Edit: bdamarest in grado di riprodurre il problema scala sul set di dati di diamante in questo modo:
example_1 = ggplot(diamonds, aes(x=clarity, fill=cut)) +
geom_bar() + scale_y_log10(); print(example_1)
#data.melt is the name of my dataset
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar()
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
ecco alcuni dati di esempio ... e penso di vedere il problema. Il set di dati fuso originale poteva essere lungo ~ 10^8 righe. Forse i numeri di riga vengono utilizzati per le statistiche?
> head(data.melt)
Library name group
221938 AB Arthrofactin glycopeptide
235087 AB Putisolvin cyclic peptide
235090 AB Putisolvin cyclic peptide
222125 AB Arthrofactin glycopeptide
311468 AB Triostin cyclic depsipeptide
92249 AB CDA lipopeptide
> dput(head(test2))
structure(list(Library = c("AB", "AB", "AB", "AB", "AB", "AB"
), name = c("Arthrofactin", "Putisolvin", "Putisolvin", "Arthrofactin",
"Triostin", "CDA"), group = c("glycopeptide", "cyclic peptide",
"cyclic peptide", "glycopeptide", "cyclic depsipeptide", "lipopeptide"
)), .Names = c("Library", "name", "group"), row.names = c(221938L,
235087L, 235090L, 222125L, 311468L, 92249L), class = "data.frame")
UPDATE:
numeri di riga non sono il problema. Ecco gli stessi dati graficamente utilizzando gli stessi AES asse xe colore di riempimento e la scala è del tutto corretto:
> ggplot(data.melt, aes(name, fill= name)) + geom_bar()
> ggplot(data.melt, aes(name, fill= name)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
grazie Brian, apprezzo la tua spiegazione dettagliata. Puoi anche utilizzare geom_bar (position = "dodge") (risposta per gentile concessione di Winston Chang) – zach
Per dare un po 'di più informazioni su ciò che sta accadendo qui, i grafici a barre in pila ti danno generalmente un'altezza di barra uguale alla somma dei conteggi. Tuttavia, sum (log (conteggi)) equivale a log (prodotto (conteggi)). In altre parole, vedrai le altezze come se moltiplichi i conteggi insieme. – Brian