5 votos

Un gráfico de barras y su aspecto: ¿debo añadir títulos, dónde deben ir los valores, etc.?

No utilicé r pero recientemente he decidido utilizarlo para trazar gráficos debido a su gran capacidad para hacerlo. Me gustaría trazar un gráfico que muestre la participación de los votantes en las elecciones. No sé mucho sobre gráficos adecuados (es decir, correctos en cuanto a su aspecto), así que he encontrado en Internet uno que me parece bien. Aquí está este gráfico:

enter image description here

Aquí está mi gráfico. Puedes ver que está lejos de ser bueno (la captura de pantalla es de R-Fiddle y creo que el gráfico puede verse diferente cuando se compila desde el escritorio de R).

enter image description here

¿Qué debo hacer para que sea mejor (por ejemplo, legible)? En concreto, ¿necesito títulos para los ejes X e Y? ¿Se ve mejor si los valores están encima de las barras (como en mi gráfico) o dentro de las barras (el gráfico que se encuentra en Internet)?

Mi código es:

# Load packages
library(ggplot2)
library(scales)
# Create dataset
dat <- data.frame(years = c("1991", "1993", "1997", "2001", "2005", "2007", "2011", "2015"),
freq = c(43.20, 52.13, 47.93, 46.29, 40.57, 53.88, 48.92, 50.92))
# Create graph bar
ggplot(dat, aes(years, freq)) +   geom_bar(stat = "identity", width=0.55)
+ geom_text(aes(label=comma(freq), y=freq+1.1))  
+ scale_y_continuous(breaks = seq(0,50,10)) +  theme_classic()

EDITAR:

He intentado incorporar todas las sugerencias que he podido en los comentarios y respuestas. Se me ha ocurrido lo siguiente:

enter image description here

¿Qué te parece?

0 votos

Tufte'rize: ggplot(dat, aes(years, freq)) + geom_bar(stat = "identity", width=0.55, fill="grey")+ scale_y_continuous(breaks = seq(0,50,10)) + geom_hline(yintercept= seq(0,50,10), col="white") + theme_classic(base_size = 16) + labs(x=NULL, y=NULL) + ggtitle("freq per year") .

0 votos

Gracias, ahora el gráfico se ve mejor. Basándome en tu comentario he utilizado ggplot(dat, aes(years, freq)) + geom_bar(stat = "identity", width=0.55, fill="grey64")+ scale_y_continuous(breaks = seq(0,65,10)) + geom_hline(yintercept= seq(0,65,10), col="white") + theme_classic(base_size = 16) + labs(x=NULL, y=NULL) + geom_text(aes(label=format(freq,decimal.mark = ","), y=freq+2.2), size=3) . Hágame saber lo que piensa al respecto. Para mí su respuesta merece ser dada como respuesta.

0 votos

Claro, por qué no. (Al principio pensé que esta pregunta podría cerrarse porque no está lo suficientemente relacionada con la estadística). Me gusta tu enfoque. Sin embargo, ¿no es redundante el eje Y, ahora?

4voto

guenter Puntos 429

Tal vez " Tufte`rize " su parcela:

ggplot(dat, aes(years, freq)) + 
  geom_bar(stat = "identity", width=0.55, fill="grey")+ 
  scale_y_continuous(breaks = seq(0,50,10)) + 
  geom_hline(yintercept= seq(0,50,10), col="white") + 
  theme_classic(base_size = 16) + theme(axis.ticks=element_blank()) + 
  labs(x=NULL, y=NULL) +
  ggtitle("freq per year")

o

ggplot(dat, aes(years, freq)) + 
  geom_bar(stat = "identity", width=0.55, fill="grey64")+ 
  scale_y_continuous(breaks = seq(0,65,10)) + 
  theme_classic(base_size = 18) + 
  theme(axis.text.y=element_blank(), axis.ticks=element_blank(), axis.line.y=element_blank()) + 
  labs(x=NULL, y=NULL) + 
  geom_text(aes(label=format(freq,decimal.mark = ",")), vjust=-.3, size = 4)

enter image description here

3voto

EdM Puntos 5716

Esta no es una buena aplicación de un gráfico de barras. Tufte no estaría satisfecho, ni siquiera con los gráficos de barras supuestamente "Tufte`rizados" que se recomiendan en otra respuesta. Los diagramas de barras utilizan demasiada tinta para la información que transmiten. Véase Sitio web de Tufte y libros, y si es posible asistir a uno de sus seminarios sobre cómo mostrar los datos de forma eficaz.

La visualización de estos datos no requiere más que un gráfico lineal de la participación en función del año. El gráfico de líneas, con un espacio igual de años reales a lo largo del eje x, también eliminará la implicación contenida en el gráfico de barras de que las observaciones están igualmente espaciadas en el tiempo.

He aquí un ejemplo que pone de relieve los cambios en la gama de valores observados:

enter image description here

Me parece que las líneas de conexión entre los puntos ayudan a seguir las relaciones temporales, aunque sólo haya 8 observaciones desigualmente espaciadas. Nick Cox señaló acertadamente en un comentario que esto podría sugerir cambios lineales entre las fechas. Las líneas son grises, con puntos negros en las observaciones, en un intento de restar importancia a tal sugerencia.

Si está más interesado en los cambios con respecto a una línea de base del 0% de participación, podría ajustar los límites del eje Y en consecuencia. Pero, ¿has tenido alguna vez algo cercano al 0% de participación en unas elecciones? Además, las cifras no son un buen lugar para mostrar los resultados con dos decimales. Para ello, utiliza una tabla.

El código es todo de base gráfica R. Probablemente se puede hacer algo más elegante con ggplot pero tengo poca experiencia en eso. En primer lugar, cambiar sus "años" en numérico de texto:

dat$years <- as.numeric(as.character(dat$years))

Entonces, para la trama:

plot (freq~years,data=dat,xlim=c(1990,2016),xlab="Year",ylab="Percentage Turnout",type="l",axes=FALSE,col="gray")
points (freq~years,data=dat,pch=19)
axis(1,at=seq(1990,2020,10))
axis(2,at=seq(42,54,6))

Los gráficos estándar de R colocan un recuadro potencialmente molesto alrededor de todo el gráfico, que se omite aquí por el axes=FALSE en la especificación plot que dibuja las líneas grises. La página web points y coloca los puntos. Las especificaciones separadas con axis permite controlar dónde se colocan y etiquetan las marcas de verificación; R puede tender a sobreetiquetar un poco al gusto de algunas personas.

0 votos

Gracias por esto. He intentado incorporar sus sugerencias. ¿Podría echar un vistazo a mi pregunta editada?

1voto

Doug Kavendek Puntos 1244

Estoy de acuerdo con el punto de EdM de que "los gráficos de barras simplemente tienen demasiada tinta para la información transmitida". Aquí hay una versión ggplot2 de su respuesta:

library(ggplot2)

df <- data.frame(years=c(1991, 1993, 1997, 2001, 2005, 2007, 2011, 2015),
                 freq=c(43.20, 52.13, 47.93, 46.29, 40.57, 53.88, 48.92, 50.92))

p <- (ggplot(df, aes(x=years, y=freq)) +
      geom_line(size=1.25, color="#999999") + geom_point(size=3.5, color="black") +
      theme_bw() +
      theme(panel.border=element_blank(), panel.grid.minor=element_blank(),
            axis.title.y=element_text(vjust=1.25)) +
      scale_x_continuous("", breaks=seq(1990, 2015, 5), minor_breaks=NULL) +
      scale_y_continuous("percentage turnout", limits=c(36, 59),
                         breaks=seq(40, 55, 5), minor_breaks=NULL))
p
ggsave("percentage_turnout_over_time.png", p, width=10, height=8)

Lo que produce esto:

ggplot2 graph

Edición: aquí hay una versión con números en el gráfico:

p <- (ggplot(df, aes(x=years, y=freq, label=freq)) +
      geom_line(size=1.25, color="#999999") + geom_point(size=3.5, color="black") +
      geom_text(vjust=c(2, -1, -1.5*sign(diff(diff(df$freq))) + 0.5)) +
      theme_bw() +
      theme(panel.border=element_blank(), panel.grid.minor=element_blank(),
            axis.title.y=element_text(vjust=1.25)) +
      scale_x_continuous("", breaks=seq(1990, 2015, 5), minor_breaks=NULL) +
      scale_y_continuous("percentage turnout", limits=c(36, 59),
                         breaks=seq(40, 55, 5), minor_breaks=NULL))
p
ggsave("percentage_turnout_over_time_with_text.png", p, width=10, height=8)

ggplot2 graph second version

El comentario de Nick Cox bajo el post original es convincente:

Yo también veo bien que se muestren los números. La gente a menudo quiere leer números de los gráficos, al igual que (debería) querer leer los números de las tablas. Además, ofrecer un gráfico MÁS una tabla en un artículo a menudo sería los revisores rechazan por dedicar demasiado espacio a la misma información. información, por lo que hibridar gráfico y tabla es perfectamente defendible.

0 votos

Esto parece muy interesante, sin embargo, el lector no sabe cuándo tuvo lugar cada elección, por lo que probablemente habría que añadir las fechas para transmitir esta información. ¿Qué opina de esta idea? ¿Y qué hay de los valores sobre la frecuencia? Personalmente creo que son importantes porque dan al lector el valor exacto y no lo busca en otros lugares (tablas, texto del artículo).

0 votos

Creo que incluir la frecuencia exacta con dos decimales es exagerado. ¿Importa que sea 51,27 o 52,09?

0 votos

¿Qué opinas de incluir la frecuencia en absoluto? Si echas un vistazo a mi pregunta editada, verás que he elegido un decimal. ¿Y qué hay de incluir las fechas de las elecciones?

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