2012-12-01 15 views
7

Ho guardato un po 'Aronud ma sono perplesso su questo. Non riesco a trovare un modo per tracciare una linea che non è associata a un grafico a dispersione. Ecco alcuni dati e codice per chiarire il problema. Ho dati fuori il seguente moduloMixing line e scatterplot in ggplot

> head(allData) 
    AnnounceDate MarketProbability DealStatus binary BrierScore 
1 2000-04-10   0.3333333 Complete  1 0.2340565 
2 2000-06-14   0.2142857 Complete  1 0.3618200 
3 2000-06-26   0.6846154 Complete  1 0.3690167 
4 2000-06-16   0.1875000 Complete  1 0.4364041 
5 2000-10-05   0.9555556 Complete  1 0.3078432 
6 2000-10-19   0.8500000 Complete  1 0.2670799 

vorrei tracciare un grafico a dispersione dei MarketProbabilities contro l'AnnounceDate, e identificare se non un affare di completato con successo usando il colore, cioè

ggplot(data = allData, aes(x=AnnounceDate, y=MarketProbability, colour=DealStatus)) + geom_point() + scale_colour_hue(h = c(180,0)) 

enter image description here

ma vorrei anche di sovrapporre un punteggio Brier rotolamento, ho cercato

ggplot(data = allData, aes(x=AnnounceDate, y=MarketProbability, colour=DealStatus)) + geom_point() + scale_colour_hue(h = c(180,0)) + geom_line(aes(x=AnnounceDate, y=BrierScore)) 

enter image description here

Sono confuso perché sta tracciando due righe e aggiungendo colore? Come posso disassociare la linea con le informazioni precedentemente tracciate?

risposta

5

Come ha sottolineato @MattBagg, questo problema viene risolto spostando lo aes() per il colore fuori dalla chiamata principale ggplot() e nella chiamata geom_point().

library(ggplot2) 

allData = read.table(header=TRUE, 
colClasses=c("Date", "numeric", "character", "numeric", "numeric"), 
text="AnnounceDate MarketProbability DealStatus binary BrierScore 
2000-04-10   0.3333333 Complete  1 0.2340565 
2000-06-14   0.2142857 Complete  1 0.3618200 
2000-06-26   0.6846154 Complete  1 0.3690167 
2000-06-16   0.1875000 Complete  1 0.4364041 
2000-10-05   0.9555556 Complete  1 0.3078432 
2000-10-19   0.8500000 Complete  1 0.2670799") 

p1 = ggplot(data=allData, aes(x=AnnounceDate)) + 
    geom_point(aes(y=MarketProbability, colour=DealStatus)) + 
    scale_colour_hue(h = c(180,0)) + 
    geom_line(aes(y=BrierScore)) 

ggsave(filename="plot_1.png", plot=p1, height=2.5, width=5) 

enter image description here

+1

geom_path: Ogni gruppo è composto di una sola osservazione. Hai bisogno di adattare l'estetica del gruppo? – agstudy

+0

Non sono sicuro di come interpretare il tuo commento: Usando ggplot2 0.9.2.1, il codice postato viene eseguito senza errori e restituisce il png postato. Per quanto posso vedere, non è necessario definire l'estetica del gruppo. – bdemarest

+0

Ho la stessa versione. problema davvero sorprendente! – agstudy

2

L'aes() in ggplot() viene ereditato dalle successive geom. Hai assegnato colore = DealStatus, che viene ereditato da geom_line() e deve creare due linee per creare due colori. Non riesco a testare questo perché sono sul mio cellulare, ma provare a spostare l'assegnazione dei colori fuori dal ggplot principale e nella geom_point():

ggplot(data = allData, aes(x=AnnounceDate)) + 
    geom_point(aes(colour=DealStatus, y=MarketProbability)) + 
    scale_colour_hue(h = c(180,0)) + 
    geom_line(aes(y=BrierScore, group=1)) 

sto aggiungendo una costante come argomento gruppo di raccontarla per connettere tutti i punti. Altrimenti, ggplot a volte fa le ipotesi sbagliate.