2015-03-27 11 views
6

Quindi, ho un dataset abbastanza grande (Dropbox: csv file) che sto cercando di tracciare usando geom_boxplot. Di seguito produce quello che sembra essere un complotto ragionevole:mediano di boxplot ggplot2 mediano non stanno tramando come previsto

require(reshape2) 
require(ggplot2) 
require(scales) 
require(grid) 
require(gridExtra) 

df <- read.csv("\\Downloads\\boxplot.csv", na.strings = "*") 
df$year <- factor(df$year, levels = c(2010,2011,2012,2013,2014), labels = c(2010,2011,2012,2013,2014)) 

d <- ggplot(data = df, aes(x = year, y = value)) + 
    geom_boxplot(aes(fill = station)) + 
    facet_grid(station~.) + 
    scale_y_continuous(limits = c(0, 15)) + 
    theme(legend.position = "none")) 
d 

Tuttavia, quando si scava un po 'più profonda, problemi insinuarsi che mi fuori di testa. Quando ho etichettato le mediane di boxplot con i loro valori, i seguenti risultati della trama.

df.m <- aggregate(value~year+station, data = df, FUN = function(x) median(x)) 
d <- d + geom_text(data = df.m, aes(x = year, y = value, label = value)) 
d 

boxplots-with-medians-labelled

Le mediane tracciati dal geom_boxplot non sono affatto le mediane a tutti. Le etichette sono tracciate con il valore dell'asse y corretto, ma la cerniera centrale dei riquadrati non si trova nelle mediane. Sono stato sconcertato da questo per alcuni giorni.

Qual è il motivo? Come può essere prodotto questo tipo di display con mediane corrette? Come può questa trama essere debellata o diagnosticata?

+1

Il codice di esempio presenta un'incoerenza. Stai chiamando 'geom_text' contro' temp.m', ma la mediana è stata calcolata in 'turb.m'. Potrebbe essere questo il problema? – vpipkt

+0

Ah! Buon appello a questo ... Ho provato a rimuovere le mie incongruenze dal codice originale, ma mi mancava quello. Questo errore causerebbe il fallimento del layer geom_text, ma anche senza il testo geom aggiunto al plot, le mediane sono ancora disegnate in modo errato sui boxplot. –

+0

Il "*" nel campo 'value' deve essere interpretato come NA? – vpipkt

risposta

5

La soluzione a questa domanda è nell'applicazione di scale_y_continuous. ggplot2 eseguirà operazioni nel seguente ordine:

  1. Scale Trasformazioni
  2. calcoli statistici
  3. di coordinate

In questo caso, poiché una trasformazione scala viene richiamato dati, esclude ggplot2 fuori scala limiti per il calcolo statistico delle cerniere del boxplot. Le mediane calcolate dalla funzione aggregate e utilizzate nell'istruzione geom_text utilizzeranno comunque l'intero set di dati. Ciò può comportare diverse cerniere mediane e etichette di testo.

La soluzione è di omettere l'istruzione scale_y_continuous invece utilizzare:

d <- ggplot(data = df, aes(x = year, y = value)) + 
geom_boxplot(aes(fill = station)) + 
facet_grid(station~.) + 
theme(legend.position = "none")) + 
coord_cartesian(y = c(0,15)) 

Questo permette ggplot2 per calcolare le statistiche cerniera a scatole usando l'intero set di dati, limitando la dimensione trama della figura.

+0

Questo è un grosso problema con ggplot2 imho. L'ho usato per molto tempo senza accorgermene. Dovrebbero esserci degli avvertimenti. – ajrwhite

+1

Mi ha reso molto cauto - e nervoso - su come interpreto i miei dati. Ho messo in discussione tutto su R quando l'ho incontrato per la prima volta, finché non ho finalmente capito cosa stava succedendo. Sono sicuro che ci sono molti utenti occasionali di R/ggplot che non sono consapevoli del fatto che questo potrebbe avere un impatto sul loro lavoro. –

Problemi correlati