2016-04-15 1 views
2

Ich habe einige Daten, die ich gerne visualisieren würde und ich bin in der Lage, das Diagramm auf der linken Seite zu machen, aber ich würde gerne mehr Informationen für den Betrachter durch Implementieren von Features wie im Bild auf der rechten Seite: schattiert basierend auf vordefinierten Bereichen und Prozentsatz der Fläche in jedem Bereich. enter image description hereÄndern der Farbe der Dichte Plots in ggplot2 basierend auf X-Achse

ich erkennen, dass diese Frage auf diese beiden Antworten ähnlich ist, aber ich verstehe nicht, Dichten genug, um den Datenrahmen in dem richtigen Format zu erhalten:

Hier ist der Code, der mein Beispiel repliziert .

Wenn Sie können, verwenden Sie bitte dplyr in Ihrer Antwort.

Vielen Dank im Voraus.

library(dplyr) 
library(ggplot2) 
options(scipen = 999) 

#Get percentages 
    diamonds%>% 
    mutate(Cut = cut, 
      Prices = cut(price, 
         breaks=c(0,2499,4999, 19000), 
         include.lowest=T, dig.lab=10))%>% 
    group_by(Cut, Prices)%>% 
     summarise(Count = n())%>% 
    group_by(Cut)%>% 
     mutate(Pct = round(Count/sum(Count), 2))%>% 
    ungroup() 


#Plot 
    ggplot(diamonds, aes(x=price))+ 
    geom_density(fill="grey50")+ 
    facet_grid(cut~.)+ 
    geom_vline(xintercept = c(2500,5000))+ 
    theme(axis.text.y = element_blank(), 
      axis.ticks.y = element_blank()) 
+1

Es gibt keine Verbindung zwischen den 'diamonds' Daten, die Sie durch die Verarbeitungsschritte werden Rohrleitungen und die 'ggplot' Anruf. – shekeine

Antwort

1

Das Problem ist, dass Sie nicht Dichtedaten in der diamondsdata.frame haben. Das andere Problem, dem Sie gegenüberstehen, ist, dass Sie die Facetteninformationen behalten müssen. Ich bin nicht sicher, wie man dplyr erhält, um durch zu gruppieren und density() zu erhalten. Man kann zusammenfassende Daten wie du erstellen, aber um ein Dichtediagramm zu erstellen, brauchst du x, y Informationen für jeden Punkt.

Eine Abhilfe Ich fand macht die Dichteplot p wie diese

p<-ggplot(diamonds,aes(x=price))+geom_density()+facet_wrap(~cut,nrow=5) 

Und dann ggplot_build Funktion Ussing die Daten zu erhalten, die Sie

pg <- ggplot_build(p) 

Dies wird eine Liste aufgetragen wird, wo die erstes Element ist der eigentliche Datensatz

pg_data<-data.frame(pg$data[[1]],stringsAsFactors = F) 

Sie können überprüfen, ob Sie in sind Interessiert an der y-Spalte (was der Dichte entspricht) x wird der Preis sein und PANEL wird die Facette sein. Ich habe das nicht mit Gut, Sehr gut in den Faktormodus geändert ... aber ich schätze, du kannst es.

head(pg_data) 
       y  x  density scaled  count n PANEL group 
1 0.00005370272 326.0000 0.00005370272 0.2756038 0.08646139 1610  1 -1 
2 0.00005829975 362.1977 0.00005829975 0.2991959 0.09386259 1610  1 -1 
3 0.00006307436 398.3953 0.00006307436 0.3236993 0.10154972 1610  1 -1 
4 0.00006798165 434.5930 0.00006798165 0.3488836 0.10945045 1610  1 -1 
5 0.00007298816 470.7906 0.00007298816 0.3745772 0.11751094 1610  1 -1 
6 0.00007807049 506.9883 0.00007807049 0.4006598 0.12569348 1610  1 -1 
    ymin   ymax fill weight colour alpha size linetype 
1 0 0.00005370272 NA  1 black NA 0.5  1 
2 0 0.00005829975 NA  1 black NA 0.5  1 
3 0 0.00006307436 NA  1 black NA 0.5  1 
4 0 0.00006798165 NA  1 black NA 0.5  1 
5 0 0.00007298816 NA  1 black NA 0.5  1 
6 0 0.00007807049 NA  1 black NA 0.5  1 

Jetzt können wir alles plotten wieder, aber die Dichtedaten unter Verwendung wir

benötigen
ggplot(data=pg_data,aes(x,y))+geom_line()+facet_wrap(~PANEL,nrow=5)+geom_area(data=subset(pg_data,x>2499&x<5000),aes(x,y),fill = "red", alpha = 0.5) 

enter image description here

+0

Wow, vielen Dank! Ich habe viel von deiner Antwort gelernt. – yake84