2012-01-31 14 views
7

Dado que hist() de la base R no informa los porcentajes (y la frecuencia = FALSO) tampoco ayuda, cambié a lattice.Histograma en el enrejado

histogram(rnorm(10000)) 

favor me ayude con lo siguiente:

  1. ¿Cómo puedo deshacerme de la caja cerca de la trama?
  2. ¿Cómo puedo definir por separado el cex de las etiquetas x/y el eje x/y?
  3. ¿Cómo puedo proporcionar nombres personalizados para los ejes xey?
+0

¿Nos puedes contar cuál es su problema con 'hist' es, sólo por curiosidad? Cuando especifico 'freq = FALSE' obtengo un histograma de densidad (es decir, porcentajes). – joran

+1

Hola @joran. Para ver el problema al que probablemente se está refiriendo ECII, intente 'hist (runif (1000), freq = FALSE, col = gray (.6))'. El eje y nota correctamente la densidad de probabilidad, pero la masa de probabilidad con cada barra (el producto de la densidad multiplicado por el ancho) debería estar alrededor de una décima parte de la densidad, ya que hay 10 barras ... Entonces, creo * ECII está solicitando marcas de eje que indicen el porcentaje de las observaciones que caen dentro de cada barra. –

Respuesta

6

Esto debería empezar:

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

O bien, si desea seguir con hist(), puede modificar ligeramente, como se muestra a continuación.

Esta función llama al hist() una vez para obtener su valor de retorno, que es un objeto que contiene todo tipo de información útil sobre la estructura del histograma. Luego usa (a) el ancho de los contenedores y (b) la densidad de cada barra para calcular (c) el porcentaje de las observaciones que caen en cada 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

Fantástico. Pensé que no sería posible con la base. Sin embargo, debo dárselo a Andrie ya que la pregunta especifica enrejado. Muchas gracias. – ECII

+1

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

+0

Me gustan las etiquetas de eje también. –