4 votos

Gráfico sugerencias para el flujo de datos

Estoy trabajando en un proyecto en R utilizando la Encuesta Social General que los gráficos de los números de un grupo religioso que se convierten a otra (el Católico $\rightarrow$ Evangélica, Evangélicos $\rightarrow$ Ninguno, Ninguno $\rightarrow$ Católico, Católico $\rightarrow$ Ninguno, etc.). Me gustaría crear una representación gráfica de esta muestra los tamaños relativos de las poblaciones que están haciendo estos cambios. Actualmente estoy usando un gráfico de barras apiladas, pero es difícil de leer. Existe una mejor tabla para mostrar el flujo de datos de un estado a otro?

código para el conjunto de datos

Region  <- rep(c('Midwest'),9)
RELIG16 <- rep(c('Protestant','Catholic','None'),3)
OutRel  <- rep(c('Protestant'), 3) 
OutRel  <- append(OutRel, rep(c('Catholic'),3))
OutRel  <- append(OutRel, rep(c('None'),3))
value   <- rep(c(77.35, 10.25, 18.18),3)
df      = data.frame(Region, RELIG16, OutRel, value)

ggplot(df, aes(x=RELIG16, y=value, fill=OutRel)) + geom_bar(stat="identity") +
  xlab("Original Religious Affilliation") + ylab("Percentage") +
  scale_fill_discrete(name="Conversion\nType",
                  # breaks=c("protestant.prop", "catholic.prop", "none.prop"),
                  labels=c("to Protestant", "to Catholicism", "to None")) +
  ggtitle("Conversion of All Millennials By Region")

4voto

Sean Hanley Puntos 2428

Los datos son un poco extraño para mí. Supongo que value está destinado a ser la proporción de miembros de una determinada religión, que eran creyentes en la RELIG16 religión anteriormente. He ajustado los números, por lo que agregó que hasta el 100%.

Region  <- rep(c('Midwest'),9)
RELIG16 <- rep(c('Protestant','Catholic','None'),3)
OutRel  <- rep(c('Protestant'), 3) 
OutRel  <- append(OutRel, rep(c('Catholic'),3))
OutRel  <- append(OutRel, rep(c('None'),3))
value   <- c(77.35, 15.25, 7.4)[c(1:3,2,1,3,2,3,1)]
df      = data.frame(Region, RELIG16, OutRel, value)
df
#    Region    RELIG16     OutRel value
# 1 Midwest Protestant Protestant 77.35
# 2 Midwest   Catholic Protestant 15.25
# 3 Midwest       None Protestant  7.40
# 4 Midwest Protestant   Catholic 15.25
# 5 Midwest   Catholic   Catholic 77.35
# 6 Midwest       None   Catholic  7.40
# 7 Midwest Protestant       None 15.25
# 8 Midwest   Catholic       None  7.40
# 9 Midwest       None       None 77.35

Ya que sus datos son los flujos, estoy de acuerdo con @JakeKaupp que un diagrama de Sankey es el más apropiado. Estoy más de acuerdo acerca del uso de la riverplot paquete en R. Hay varios paquetes para hacer diagramas de Sankey en R (aunque yo no estoy familiarizado con un ggplot2 versión), pero estoy más familiarizado con riverplot. He aquí un ejemplo de diagrama de Sankey con su (modificado) de datos:

library(riverplot)
eg = data.frame(N1=rep(letters[1:3], times=3), 
                N2=rep(letters[4:6], each=3), 
                Value=df$value)
nd = data.frame(ID=letters[1:6], x=rep(1:2, each=3), labels=df[1:6,2])
rp = makeRiver(nodes=nd, edges=eg, node_styles=list(
                   a=list(col="red"), b=list(col="yellow"), c=list(col="blue"), 
                   d=list(col="red"), e=list(col="yellow"), f=list(col="blue") ))
windows(height=4, width=7)
  plot(rp, plot_area=.7, gravity="bottom")
  title(main="Transitions between Religions", line=-1.5)

enter image description here


Si usted tenía una matriz con el número real de personas en cada combinación de antes y después de las preferencias religiosas, puede utilizar los métodos estándar para la visualización de las tablas de contingencia, tales como el mosaico de parcelas o, posiblemente, el análisis de correspondencias.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X