varias superponer los lineas graficos grafico graficas ggplot escala ejes dispersion como cambiar barras r ggplot2

los - superponer graficas en r ggplot



Crea barra de gráficos apiladas donde cada escala se escala para sumar al 100% (4)

Tengo un data.frame como este:

df <- read.csv(text = "ONE,TWO,THREE 23,234,324 34,534,12 56,324,124 34,234,124 123,534,654")

Quiero producir un gráfico de porcentaje de barras que se ve así (hecho en LibreOffice Calc):

Por lo tanto, las barras deben estar estandarizadas para que todas las pilas tengan la misma altura y sumas hasta el 100%. Hasta ahora, todo lo que he podido obtener es una barra de barras apiladas (no por ciento), usando:

barplot(as.matrix(df))

¿Alguna ayuda?


Chris Beeley es estricto, solo necesitas las proporciones por columna. Usando sus datos es:

your_matrix<-( rbind( c(23,234,324), c(34,534,12), c(56,324,124), c(34,234,124), c(123,534,654) ) ) barplot(prop.table(your_matrix, 2) )

Da:


Desde que etiquetó esto con ggplot2 aquí hay una solución que usa ese paquete (versión 0.9.0) además de lo que ha obtenido hasta ahora.

Usamos el argumento de position de geom_bar set to position = "fill" . También puede usar position = position_fill() si desea usar los argumentos de position_fill() ( vjust e reverse ).

Tenga en cuenta que sus datos están en un formato ''ancho'', mientras que ggplot2 requiere que estén en un formato ''largo''. Por lo tanto, primero necesitamos melt los datos.

dat <- read.table(text = " ONE TWO THREE 1 23 234 324 2 34 534 12 3 56 324 124 4 34 234 124 5 123 534 654",sep = "",header = TRUE) #Add an id variable for the filled regions library(reshape) datm <- melt(cbind(dat, ind = rownames(dat)), id.vars = c(''ind'')) library(scales) ggplot(datm,aes(x = variable, y = value,fill = ind)) + geom_bar(position = "fill",stat = "identity") + # or: # geom_bar(position = position_fill(), stat = "identity") scale_y_continuous(labels = percent_format())


Solo necesita dividir cada elemento por la suma de los valores en su columna.

Hacer esto debería ser suficiente:

data.perc <- apply(data, 2, function(x){x/sum(x)})

Tenga en cuenta que el segundo parámetro dice apply para aplicar la función proporcionada a las columnas (con 1 se aplicaría a las filas). La función anónima, entonces, pasa cada columna de datos, una a la vez.


prop.table es una forma agradable de obtener proporciones de tablas.

m <- matrix(1:4,2) m [,1] [,2] [1,] 1 3 [2,] 2 4

Dejar el margen en blanco le da proporciones de toda la tabla

prop.table(m, margin=NULL) [,1] [,2] [1,] 0.1 0.3 [2,] 0.2 0.4

Darle 1 te da proporciones de fila

prop.table(m, 1) [,1] [,2] [1,] 0.2500000 0.7500000 [2,] 0.3333333 0.6666667

Y 2 son proporciones de columna

prop.table(m, 2) [,1] [,2] [1,] 0.3333333 0.4285714 [2,] 0.6666667 0.5714286