2016-04-19 16 views
0

Ich kann einfach ein gestapeltes Histogramm mit ggplot2 mit Zählwerten auf der y-Achse erstellen. Was ich will, ist dieses Diagramm in Bezug auf die Dichte zu konvertieren. Ich kann dies tun, indem ich die aes (y = .. dichte ..) in die geom_histogram-Ebene einfüge; aber was ggplot tut, ist, die Dichte jeder einzelnen Datenreihe so aufzutragen, dass sie eine Gesamtfläche von jeweils 1 hat. Also, wenn Sie 4 Datenreihen in einem Histogramm stapeln wird die Gesamtfläche der Balken 4.ggplot2 stacked histogram - konvertieren in Dichteplot

Was ich danach bin, ist das gestapelte Histogramm in Bezug auf die Dichte zu plotten, aber alle Datenreihen bei der Berechnung berücksichtigt haben die Dichte. Mit anderen Worten: Ich möchte, dass das Dichte-Histogramm die gleichen Proportionalitäts-Balken aufweist wie das Histogramm.

+0

Helfen Sie uns helfen, indem sie eine [reproduzierbaren Beispiel] Bereitstellung (http://stackoverflow.com/a/5965451/496488). – eipi10

Antwort

1
library(ggplot2) 
dtDataset = data.frame(
    V1 = c('a','b'), 
    V2 = runif(20) 
) 

ggplot(dtDataset) + 
    geom_density(aes(x = V2, group = V1), position = 'stack') 
0

fand ich einen Weg, dies zu tun, die eine binwidth = bw, sagen wir, und Einstellen der y Variable (..count..)/(n*bw) sein beinhaltet die Berechnung, wo n die Anzahl der Datenpunkte. n

einige Spieldaten erzeugen

require(ggplot2) 

    set.seed(1234) 
    x1 <- rnorm(10000, 0, 1) 
    x2 <- rnorm(90000, 1, 1) 
    X <- data.frame(x = c(x1, x2), 
        Class = as.factor(c(rep(1, length(x1)), rep(2, length(x2))))) 

berechnen und binwidth

n <- dim(X)[1] 
    bw <- 3.49 * sd(X[, "x"]) * dim(X)[1]^(-1/3) ## binwidth using Scott's rule. 

generieren, um den Plot

p1 <- ggplot(data = X, aes(x = x, bw = bw, n = n)) + 
      geom_histogram(aes(y = (..count..)/(n * bw), fill = Class), 
          binwidth = bw) + 
      geom_density() 

    print(p1) 

nun jeder Behälter gefärbt ist entsprechend dem Anteil der enthaltenen Punkte in jedem Klasse und passt die Definition einer Dichte wie durch die schwarze Linie gegeben.

multi-class histogram

+0

Ein Jupiter-Notebook, das den obigen Code ausführt, finden Sie [hier] (https://github.com/gkiar/happy-plotter/blob/master/R/Multiclass_Histograms.ipynb) – MrAesthetic