2010-05-02 6 views
6

L'asse x è il tempo suddiviso in intervalli di tempo. C'è una colonna intervallo nella cornice dati che specifica il tempo per ogni riga. La colonna è un fattore, in cui ogni intervallo è un livello di fattore diverso.Qual è il metodo più semplice per riempire l'area sotto una linea geom_freqpoly?

Tracciare un istogramma o una linea utilizzando geom_histogram e geom_freqpoly funziona in modo ottimale, ma mi piacerebbe avere una linea, come quella fornita da geom_freqpoly, con l'area riempita.

Attualmente sto usando geom_freqpoly come questo:

ggplot(quake.data, aes(interval, fill=tweet.type)) + geom_freqpoly(aes(group = tweet.type, colour = tweet.type)) + opts(axis.text.x=theme_text(angle=-60, hjust=0, size = 6)) 

plots

io preferirei avere una zona riempita, come ad esempio fornito da geom_density, ma senza lisciatura la linea:

smoooth

Il geom_area è stato suggerito, esiste un modo per usa una statistica generata da ggplot2, come ..count .., per i valori y della geom_area? Oppure, l'aggregazione del conteggio deve verificarsi prima di utilizzare ggplot2?


Come indicato nella risposta, geom_area (..., stat = "bin") è la soluzione:

ggplot(quake.data, aes(interval)) + geom_area(aes(y = ..count.., fill = tweet.type, group = tweet.type), stat = "bin") + opts(axis.text.x=theme_text(angle=-60, hjust=0, size = 6)) 

produce:

desired

+0

se stai già facendo intervalli sei sicuro di volere una curva uniforme? – Dan

+0

No, stavo solo esplorando le geoms ggplot2 che avrebbero prodotto l'area riempita.Preferirei il geom_freqpoly, ma con un'area piena. Suppongo che geom_area lo ottenga, ma dovrò aggregare manualmente il conteggio delle frequenze. – mattrepl

+0

In realtà, esiste un motivo per cui stai utilizzando un fattore anziché una variabile di data e ora? – hadley

risposta

9

Forse si vuole:

geom_area(aes(y = ..count..), stat = "bin") 
+4

Grazie, ho usato 'stat = "bin"' prima, ma me ne sono dimenticato. Ho bisogno di comprare il tuo libro. =) – mattrepl

1

Sono non del tutto sicuro di cosa stai mirando. Vuoi una linea o barre. Dovresti controllare geom_bar per barre piene. Qualcosa di simile:

p <- ggplot(data, aes(x = time, y = count)) 
p + geom_bar(stat = "identity") 

Se si vuole una linea riempita di sotto allora si dovrebbe guardare a geom_area che non ho usato personalmente, ma sembra che il costrutto sarà quasi lo stesso.

p <- ggplot(data, aes(x = time, y = count)) 
p + geom_area() 

Spero che questo aiuti. Dare qualche informazione in più e probabilmente possiamo essere più utili.

In realtà vorrei buttare su un indice, solo la riga dei dati e l'uso che come x, e quindi utilizzare

p <- ggplot(data, aes(x = index, y = count)) 
p + geom_bar(stat = "identity") + scale_x_continuous("Intervals", 
breaks = index, labels = intervals) 
+0

e la scala funziona per geom_area e geom_bar – Dan

1

ggplot(quake.data, aes(interval, fill=tweet.type, group = 1)) + geom_density()

Ma io non credo che questo è un elemento grafico significativo .

+0

Dopo averlo visto, sono d'accordo. Aggiornerò la mia domanda per chiarire che sto cercando una trama geom_freqpoly con un'area riempita. Sembra che geom_area funzioni, ma è possibile utilizzare le statistiche fornite da ggplot2 (ad esempio, ..count ..) per i valori dell'asse y? – mattrepl

3

risposta supplementare che può aiutare: geom_ribbon può essere usato per produrre una zona riempita tra due linee senza bisogno di costruire in modo esplicito un poligono. C'è una buona documentazione qui: http://had.co.nz/ggplot2/geom_ribbon.html

Problemi correlati