graficos - plot en r
Ordenando un diagrama de caja basado en el valor mediano (3)
Echa un vistazo a ?reorder
. El ejemplo parece ser lo que quieres, pero ordenado en el orden opuesto. Cambié -count
en la primera línea de abajo para ordenar en el orden que desee.
bymedian <- with(InsectSprays, reorder(spray, -count, median))
boxplot(count ~ bymedian, data = InsectSprays,
xlab = "Type of spray", ylab = "Insect count",
main = "InsectSprays data", varwidth = TRUE,
col = "lightgray")
Me gustaría usar R para hacer una serie de diagramas de caja ordenados por valor mediano. Supongamos que luego ejecuto:
boxplot(cost ~ type)
Esto me daría algunos diagramas de caja donde el costo se muestra en el eje y y la categoría de tipo es visible en el eje x:
----- -----
| |
[ ] |
| [ ]
| |
----- -----
A B
Sin embargo, lo que me gustaría es que las cifras del diagrama de caja se ordenen de mayor a menor valor mediano. Mi sospecha es que lo que tengo que hacer es cambiar las etiquetas del tipo (A o B) para indicar numéricamente cuál es el valor mediano más bajo y más alto, pero me pregunto si hay una forma más inteligente de resolver el problema.
Sí, esa es la idea:
> set.seed(42) # fix seed
> DF <- data.frame(type=sample(LETTERS[1:5], 100, replace=TRUE),
+ cost=rnorm(100))
>
> boxplot(cost ~ type, data=DF) # not ordered by median
>
> # compute index of ordered ''cost factor'' and reassign
> oind <- order(as.numeric(by(DF$cost, DF$type, median)))
> DF$type <- ordered(DF$type, levels=levels(DF$type)[oind])
>
> boxplot(cost ~ type, data=DF) # now it is ordered by median
Tenga cuidado con los valores perdidos, debe agregar na.rm = TRUE
para que funcione. Si no, el código simplemente no funciona. Me tomó horas descubrir eso.
bymedian <- with(InsectSprays, reorder(spray, -count, median, **na.rm = TRUE**)
boxplot(count ~ bymedian, data = InsectSprays,
xlab = "Type of spray", ylab = "Insect count",
main = "InsectSprays data", varwidth = TRUE,
col = "lightgray")