2012-05-26 13 views
5

Ho una domanda riguardante un risultato strano per un grafico a linee che utilizza sfaccettature. Ho le maschere di dati dell'acqua per profondità diverse (= pressioni). I dati provengono da una tabella come tale:ggplot2 Il grafico a linee sfaccettato presenta aree della linea piene di colori solidi, perché?

Pressure Temperature pH 
0  30   8.1 
1  28   8.0 

I "fondere" questi dati di resa:

Pressure variable value 
0  Temperature 30 
1  Temperature 30 
0  pH   8.1 
1  pH   8.0 

e così via. Io ora trama questo:

ggplot(data.m.df, aes(x=value, y=Pressure)) + 
    facet_grid(.~variable, scale = "free") + 
    scale_y_reverse() + 
    geom_line() + 
    opts(axis.title.x=theme_blank()) 

Funziona un po ', tranne che ci sono parti del grafico a linee che si riempiono di tinta unita. Non ho idea del perché, soprattutto perché funziona bene se scambio x per y e uso "variabile ~". come la formula facet_grid. weird plot

+2

'geom_line' collega osservazioni in ordine di valori x. A seconda di come sono organizzati i dati, 'geom_path' potrebbe funzionare. –

+0

Grazie, geom_path funziona. Ancora non lo capisco davvero, ma guarderò le differenze. Un altro, credo che il problema correlato che non è risolto usando geom_path è che l'aggiunta di una riga con stat_smooth dà anche strani risultati. – ShellfishGene

risposta

10

Nota la differenza tra geom_line e geom_path applicata agli stessi dati.

library(ggplot2) 

x = c(seq(1, 10, 1), seq(10, 1, -1)) 
y = seq(0, 19, 1) 
df = data.frame(x, y) 

ggplot(df, aes(x, y)) + geom_line() 
ggplot(df, aes(x, y)) + geom_path() 

enter image description here

Nota l'ordine nel frame di dati df.

x y 
1 1 0 
2 2 1 
3 3 2 
4 4 3 
5 5 4 
6 6 5 
7 7 6 
8 8 7 
9 9 8 
10 10 9 
11 10 10 
12 9 11 
13 8 12 
14 7 13 
15 6 14 
16 5 15 
17 4 16 
18 3 17 
19 2 18 
20 1 19 

geom_path trame in ordine di osservazioni.

geom_line grafici in ordine di valori x.

L'effetto è più marcato quando i valori x sono più vicini.

x = c(seq(1, 10, .01), seq(10, 1, -.01)) 
y = seq(.99, 19, .01) 
df = data.frame(x, y) 

ggplot(df, aes(x, y)) + geom_line() 
ggplot(df, aes(x, y)) + geom_path() 

enter image description here

+0

Grazie per l'ottima spiegazione! Adesso è chiaro. – ShellfishGene

Problemi correlati