normal - superponer graficas en r
Hacer Histograma de Frecuencia para Variables de Factor (5)
El país es una variable categórica y quiero ver cuántas ocurrencias del país existen en el conjunto de datos. En otras palabras, cuántos registros / asistentes provienen de cada país
barplot(summary(df$Country))
Soy muy nuevo en R, así que me disculpo por una pregunta tan básica. Pasé una hora buscando en Google este problema, pero no pude encontrar una solución.
Supongamos que tengo algunos datos categóricos en mi conjunto de datos sobre tipos de mascotas comunes. Lo ingreso como un vector de caracteres en R que contiene los nombres de diferentes tipos de animales. Lo creé así:
animals <- c("cat", "dog", "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")
Lo convierto en un factor para usar con otros vectores en mi marco de datos:
animalFactor <- as.factor(animals)
Ahora quiero crear un histograma que muestre la frecuencia de cada variable en el eje y, el nombre de cada factor en el eje x, y que contenga una barra para cada factor. Intento este código:
hist(table(animalFactor), freq=TRUE, xlab = levels(animalFactor), ylab = "Frequencies")
La salida no es absolutamente como esperaba. Dejando de lado los problemas de etiquetado, parece que no puedo imaginar cómo crear un histograma de frecuencia simple por categoría.
La razón por la que obtiene el resultado inesperado es que hist(...)
calcula la distribución a partir de un vector numérico. En su código, table(animalFactor)
comporta como un vector numérico con tres elementos: 1, 3, 7. Entonces hist(...)
traza el número de 1 (1), el número de 3 (1) y el número de 7 (1). La solución de @Roland es la más simple.
Aquí hay una manera de hacer esto usando ggplot
:
library(ggplot2)
ggp <- ggplot(data.frame(animals),aes(x=animals))
# counts
ggp + geom_histogram(fill="lightgreen")
# proportion
ggp + geom_histogram(fill="lightblue",aes(y=..count../sum(..count..)))
Obtendrás exactamente el mismo resultado usando animalFactor
lugar de animals
en el código anterior.
Los datos como factor se pueden usar como entrada a la función de diagrama.
Aquí se brinda una respuesta a una pregunta similar: https://stat.ethz.ch/pipermail/r-help/2010-December/261873.html / https://stat.ethz.ch/pipermail/r-help/2010-December/261873.html
x=sample(c("Richard", "Minnie", "Albert", "Helen", "Joe", "Kingston"),
50, replace=T)
x=as.factor(x)
plot(x)
Parece que quieres barplot(prop.table(table(animals)))
:
Sin embargo, esto no es un histograma.
Si desea hacer esto en ggplot
, se realizó un cambio de API en geom_histogram()
que genera un error: https://github.com/hadley/ggplot2/issues/1465
Para evitar esto, usa geom_bar()
:
animals <- c("cat", "dog", "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")
library(ggplot2)
# counts
ggplot(data.frame(animals), aes(x=animals)) +
geom_bar()