Saltar al contenido principal

# 6.7: Gráficos de Barras

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

Otra forma de gráfica que a menudo quieres trazar es la gráfica de barras. La función principal que puedes usar en R para dibujarlos es la función barplot (). 102 Y para ilustrar el uso de la función, utilizaré la variable finalistas que introduje en la Sección 5.1.7. Lo que quiero hacer es dibujar un gráfico de barras que muestre el número de finales en las que cada equipo ha jugado a lo largo del tiempo abarcado por el conjunto de datos de la afl. Entonces, comencemos por crear un vector que contenga esta información. Voy a usar la función tabulate () para hacer esto (que se discutirá adecuadamente en la Sección?? , ya que crea un simple vector numérico:

> freq <- tabulate( afl.finalists )
> print( freq )
[1] 26 25 26 28 32  0  6 39 27 28 28 17  6 24 26 39 24

Esta no es exactamente la más bonita de las tablas de frecuencias, por supuesto. Solo lo estoy haciendo de esta manera para que puedas ver la función barplot () en su forma “pura”: cuando la entrada es solo un vector numérico ordinario. Dicho esto, obviamente voy a necesitar los nombres de los equipos para crear algunas etiquetas, así que vamos a crear una variable con esas. Lo haré usando la función levels (), que genera los nombres de todos los niveles de un factor (ver Sección 4.7:

> teams <- levels( afl.finalists )
> print( teams )
[1] "Adelaide"         "Brisbane"         "Carlton"          "Collingwood"
[5] "Essendon"         "Fitzroy"          "Fremantle"        "Geelong"
[9] "Hawthorn"         "Melbourne"        "North Melbourne"  "Port Adelaide"
[13] "Richmond"         "St Kilda"         "Sydney"           "West Coast"
[17] "Western Bulldogs"

Bien, entonces ahora que tenemos la información que necesitamos, dibujemos nuestro gráfico de barras. El argumento principal que hay que especificar para un gráfico de barras es la altura de las barras, que en nuestro caso corresponden a los valores almacenados en la variable freq:

> barplot( height = freq )  # specifying the argument name (panel a)
> barplot( freq )   # the lazier version (panel a)

Cualquiera de estos dos comandos producirá el gráfico de barras simple que se muestra en la Figura 6.21.

Como puedes ver, R ha dibujado una trama bastante mínima. ¡No tiene etiquetas, obviamente, porque en realidad no le dijimos a la función barplot () cuáles son las etiquetas! Para ello, necesitamos especificar el argumento names.arg. El argumento names.arg necesita ser un vector de cadenas de caracteres que contengan el texto que necesita ser utilizado como etiqueta para cada uno de los elementos. En este caso, el vector de equipos es exactamente lo que necesitamos, así que el comando que estamos buscando es:

barplot( height = freq, names.arg = teams ) 

Esto es una mejora, pero no mucho de una mejora. R solo ha incluido algunas de las etiquetas, porque no las puede caber en la parcela. Este es el mismo comportamiento que vimos anteriormente con la gráfica de múltiples cajas en la Figura 6.16. Sin embargo, en la Figura 6.16 no era un problema: es bastante obvio a partir de la inspección que las dos parcelas sin etiquetar entre 1987 y 1990 deben corresponder a los datos de 1988 y 1989. Sin embargo, el hecho de que barplot () haya omitido los nombres de todos los equipos entre Adelaide y Fitzroy es mucho más problemático.

La forma más sencilla de solucionarlo es rotar las etiquetas, para que el texto se extienda verticalmente no horizontalmente. Para ello, necesitamos alterar el conjunto del parámetro las, que discutí brevemente en la Sección?? . Lo que voy a hacer es decirle a R que rote el texto para que siempre quede perpendicular a los ejes (es decir, estableceré las = 2). Cuando hago eso, según el siguiente comando...

 barplot(height = freq,  # the frequencies
names.arg = teams,  # the label
las = 2)            # rotate the labels

... el resultado es el gráfico de barras que se muestra en la Figura 6.23. Hemos solucionado el problema, pero hemos creado uno nuevo: las etiquetas de los ejes ya no encajan del todo. Para arreglar esto, tenemos que volver a ser un poco más inteligentes. Una solución simple sería usar nombres más cortos en lugar del nombre completo de todos los equipos, y en muchas situaciones probablemente eso es lo correcto. Sin embargo, en otras ocasiones realmente necesitas crear un poco más de espacio para agregar tus etiquetas, así que te mostraré cómo hacerlo.

## Cambiar la configuración global usando par ()

Alterar los márgenes de la trama es en realidad un ejercicio algo más complicado de lo que piensas. En principio es algo muy sencillo de hacer: el tamaño de los márgenes se rige por un parámetro gráfico llamado mar, así que todo lo que tenemos que hacer es alterar este parámetro. Primero, veamos qué especifica el argumento mar. El argumento mar es un vector que contiene cuatro números: especificando la cantidad de espacio en la parte inferior, la izquierda, la parte superior y luego la derecha. Las unidades son “número de líneas”. El valor predeterminado para mar es c (5.1, 4.1, 4.1, 2.1) , lo que significa que R deja 5.1” líneas” vacías en la parte inferior, 4.1 líneas a la izquierda e inferior, y solo 2.1 líneas a la derecha. Para hacer más espacio en la parte inferior, lo que tengo que hacer es cambiar el primero de estos números. Un valor de 10.1 debería hacer el truco.

Hasta el momento esto no parece diferente a los otros parámetros gráficos de los que hemos hablado. Sin embargo, debido a la forma en que funciona el sistema gráfico tradicional en R, debe especificar cuáles serán los márgenes antes de llamar a su función de trazado de alto nivel. A diferencia de los otros casos que hemos visto, no se puede tratar a mar como si fuera solo otro argumento en su función de trazado. En su lugar, hay que usar la función par () para cambiar los parámetros gráficos de antemano, y sólo entonces tratar de dibujar su figura. En otras palabras, lo primero que haría es esto:

> par( mar = c( 10.1, 4.1, 4.1, 2.1) )

Aquí no hay salida visible, pero detrás de escena R ha cambiado los parámetros gráficos asociados con el dispositivo actual (recuerde, en la terminología R todos los gráficos se dibujan en un “dispositivo”). Ahora que esto está hecho, podríamos usar exactamente el mismo comando que antes, pero esta vez verías que todas las etiquetas encajan, porque R ahora deja el doble de espacio para las etiquetas en la parte inferior. Sin embargo, como ahora he descubierto cómo hacer que las etiquetas se muestren correctamente, también podría jugar con algunas de las otras opciones, todas las cuales son cosas que has visto antes:

barplot( height = freq,
names.arg = teams,
las=2,
ylab = "Number of Finals",
main = "Finals Played, 1987-2010",
density = 10,
angle = 20)

Sin embargo, una cosa a recordar sobre la función par () es que no solo cambia los parámetros gráficos para la gráfica actual. Más bien, los cambios pertenecen a cualquier trama posterior que dibuje en el mismo dispositivo. Esto podría ser exactamente lo que quieres, en cuyo caso no hay problema. Pero si no, es necesario restablecer los parámetros gráficos a su configuración original. Para ello, puedes cerrar el dispositivo (por ejemplo, cerrar la ventana, o hacer clic en el botón “Borrar todo” en el panel Parcelas en Rstudio) o puedes restablecer los parámetros gráficos a sus valores originales, usando un comando como este:

> par( mar = c(5.1, 4.1, 4.1, 2.1) )
`

This page titled 6.7: Gráficos de Barras is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform.