2014-12-25 11 views
7

Vorrei distribuire distribuzioni di probabilità discrete (come la distribuzione di Poisson) usando ggplot2.Tracciare la distribuzione di Poisson usando la funzione stat di ggplot2

Sono stato in grado di tracciare senza usare ggplot2 come questo.

plot(dpois(x=0:20, lambda=1), type="b") 

enter image description here

E, sono stato in grado di tracciare distribuzioni di probabilità continue utilizzando ggplot2 come questo.

ggplot(data.frame(x=c(-10,10)), aes(x)) + stat_function(fun=dnorm, args=list(0, 1)) 

enter image description here

E il codice che ho provato era:

ggplot(data.frame(x=c(0:10)), aes(x)) + stat_function(geom="point", fun=dpois, args=list(1)) 

enter image description here

In ggplot2, Come faccio a tracciare distribuzioni di probabilità discrete come prima?

risposta

7

stat_function cercheranno di interpolare tra i valori limite di default utilizzando n=101 punti. Il problema con le distribuzioni discrete è che x deve colpire i valori interi. Prova a specificare n = 11 nel tuo esempio:

ggplot(data.frame(x=c(0:10)), aes(x)) + 
    stat_function(geom="point", n=11, fun=dpois, args=list(1)) 

enter image description here

molto più semplice e molto più semplice è quello di utilizzare geom_point in questo caso:

ggplot(data.frame(x=c(0:10)), aes(x)) + 
    geom_point(aes(y=dpois(x, 1)), colour="red") 

enter image description here

11

Le funzioni ggplot non avrebbero idea di dove sia supportato il pdf. Se vuoi stampare un pdf discreto, dovrai calcolare tu stesso i punti. E di solito ha più senso tratteggiarli come un grafico a barre poiché non è appropriato interpolare le probabilità tra valori discreti.

ggplot(transform(data.frame(x=c(0:10)), y=dpois(x, 1)), aes(x, y)) + 
    geom_bar(stat="identity") 

enter image description here

+0

Grazie per rispondendo alla mia domanda. Darò una prova nel modo in cui dici :) – ksmzn

Problemi correlati