2012-01-31 4 views
7

Poiché hist() della base R non riporta percentuali (e il freq = FALSE) non è di aiuto, ho scelto lattice.Istogramma su reticolo

histogram(rnorm(10000)) 

Please help me con il seguente:

  1. Come posso liberarmi della scatola arround la trama?
  2. Come definire separatamente il cex delle etichette x/y e l'asse x/y?
  3. Come è possibile fornire nomi personalizzati per gli assi xe y?
+0

Puoi approfondire ciò che la vostra difficoltà con 'hist' è, solo per curiosità? Quando indico 'freq = FALSE' ottengo un istogramma di densità (cioè percentuali). – joran

+1

Ciao @joran. Per vedere il problema a cui ci si riferisce probabilmente all'ECII, prova 'hist (runif (1000), freq = FALSE, col = gray (.6))'. L'asse y rileva correttamente la densità di probabilità, ma la massa di probabilità con ogni barra (il prodotto della densità moltiplicato per la larghezza) dovrebbe essere intorno a un decimo della densità, poiché ci sono 10 barre ... Quindi penso * * L'ECII chiede tick di asse che indicizzano la percentuale delle osservazioni che rientrano in ciascuna barra. –

risposta

6

Questo dovrebbe iniziare:

library(lattice) 
histogram(rnorm(10000),  
    main=list(
     label="Main plot title", 
     cex=1.5), 
    xlab=list(
     label="Custom x-axis label", 
     cex=0.75), 
    ylab=list(
     label="My very own y-axis label", 
     cex=1.2), 
    scales=list(cex=0.5), 
    par.settings = list(axis.line = list(col = 0)) 
) 

enter image description here

7

Oppure, se si vuole attaccare con hist(), è possibile modificarlo leggermente, come illustrato di seguito.

Questa funzione chiama una volta hist() per ottenere il valore restituito, che è un oggetto contenente tutti i tipi di informazioni utili sulla struttura dell'istogramma. Quindi utilizza (a) la larghezza dei bin e (b) la densità per ogni barra per calcolare (c) la percentuale delle osservazioni che cadono in ogni barra.

histPercent <- function(x, ...) { 
    H <- hist(x, plot = FALSE) 
    H$density <- with(H, 100 * density* diff(breaks)[1]) 
    plot(H, freq = FALSE, ...) 
} 

histPercent(rnorm(10000), col="dodgerblue", las=1, 
      xlab="Echs-axis", ylab="Why-axis") 

enter image description here

+0

Fantastico. Ho pensato che non sarebbe stato possibile con la base. Comunque devo darlo ad Andrie poiché la domanda ha specificato il reticolo. Grazie mille. – ECII

+1

+1 per col = "dodgerblue" :-) – ECII

+0

Mi piacciono anche le etichette degli assi. –