Saltar al contenido

Gráficos de barras con pgfplots

Añade ybar (barras verticales) o xbar (barras horizontales) a un axis de pgfplots, nombra las categorías con symbolic x coords y da cada serie como un \addplot con coordenadas.

Barras verticales con categorías con nombre

ybar en el eje convierte todas las series en barras. symbolic x coords enumera los nombres de las categorías en orden, y xtick=data pone una marca bajo cada barra.

Una serie de barras

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[
      ybar, ymin=0,
      symbolic x coords={Mon, Tue, Wed, Thu, Fri},
      xtick=data,
      ylabel={Visitors},
      enlarge x limits=0.15,
    ]
    \addplot coordinates {(Mon,44) (Tue,31) (Wed,38) (Thu,27) (Fri,40)};
  \end{axis}
\end{tikzpicture}

Las barras empiezan en cero. Sin ymin=0, el eje añade un poco de espacio bajo el cero, así que fíjalo para que las barras se apoyen en el marco. enlarge x limits añade espacio a los lados, para que el marco no corte las barras exteriores.

Barras agrupadas y etiquetas de valor

Con varias series, las barras de cada categoría quedan una al lado de otra. nodes near coords imprime cada valor encima de su barra, y bar width fija el ancho (10pt por defecto).

Dos series, con valores sobre las barras

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[
      ybar, ymin=0, ymax=55, bar width=12pt,
      symbolic x coords={Erika, Hans, John},
      xtick=data, enlarge x limits=0.25,
      nodes near coords,
      ylabel={Points},
      legend style={at={(0.5,-0.12)}, anchor=north, legend columns=2},
    ]
    \addplot coordinates {(Erika,44) (Hans,31) (John,38)};
    \addplot coordinates {(Erika,40) (Hans,36) (John,29)};
    \legend{Round 1, Round 2}
  \end{axis}
\end{tikzpicture}
Compuesto por Scissor LaTeX: Dos series, con valores sobre las barras

ybar=4pt fija la separación entre las barras de un grupo (2pt por defecto).

Barras apiladas

ybar stacked pone las series unas encima de otras en lugar de una al lado de otra. El segundo \addplot empieza donde termina el primero.

Barras apiladas por trimestre

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[
      ybar stacked, ymin=0, bar width=16pt,
      symbolic x coords={Q1, Q2, Q3, Q4},
      xtick=data, enlarge x limits=0.2,
      legend pos=north west, ylabel={Sales},
    ]
    \addplot coordinates {(Q1,12) (Q2,18) (Q3,15) (Q4,22)};
    \addplot coordinates {(Q1,6) (Q2,9) (Q3,12) (Q4,10)};
    \legend{Online, In store}
  \end{axis}
\end{tikzpicture}

Barras horizontales

xbar dibuja las barras de izquierda a derecha. Intercambia el papel de los ejes: las categorías van en symbolic y coords y ytick=data, y cada coordenada se escribe como (valor, categoría).

Barras horizontales

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[
      xbar, xmin=0, xmax=50,
      symbolic y coords={Rust, Python, C},
      ytick=data, enlarge y limits=0.3,
      nodes near coords, xlabel={Projects},
      width=8cm, height=5cm,
    ]
    \addplot coordinates {(44,Rust) (31,Python) (12,C)};
  \end{axis}
\end{tikzpicture}

xbar stacked también funciona.

Números como categorías

Los años y otros números no necesitan symbolic x coords: dibújalos como números y usa xtick=data. pgfplots escribe 2024 como "2,024" por defecto; desactiva el separador de miles en el estilo de las etiquetas de las marcas.

Años en el eje x

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[
      ybar, ymin=0, xtick=data, enlarge x limits=0.25,
      x tick label style={/pgf/number format/1000 sep=},
    ]
    \addplot coordinates {(2023,18) (2024,31) (2025,44)};
  \end{axis}
\end{tikzpicture}

Las opciones de un vistazo

OpciónQué haceEn Scissor LaTeX
ybar, xbarbarras verticales u horizontales, una al lado de otraFunciona
ybar=4ptla separación entre las barras de un grupoFunciona
ybar stacked, xbar stackedbarras unas encima de otrasFunciona en ejes lineales
bar width=12ptel ancho de cada barraFunciona
bar shift=..desplaza una serie hacia un ladoFunciona
nodes near coordsel valor encima (o al lado) de cada barraFunciona
symbolic x coords, symbolic y coordscategorías con nombreFunciona, salvo con nombres que parecen números (sin etiquetas de marca)
xticklabel style={rotate=45, anchor=east}nombres de categoría inclinadosFunciona
ybar intervalbarras que llenan el espacio entre valores xEn parte: se dibujan como barras normales en los valores x
hist (biblioteca statistics)agrupa los valores en intervalosNo se admite: se ignora con un mensaje, y los valores sin procesar se dibujan como una línea

Diferencias con una instalación de TeX

Todos los ejemplos de esta página también compilan con pgfplots en una instalación de TeX. Manual: ctan.org/pkg/pgfplots.

Consulta también Fundamentos de pgfplots, Barras de error, Datos desde CSV y pgfplots.

Preguntas y respuestas

¿Cómo hago un gráfico de barras en LaTeX?

Carga pgfplots y escribe \begin{axis}[ybar, symbolic x coords={A,B,C}, xtick=data] con un \addplot coordinates {(A,3) (B,5) (C,2)}; por serie.

¿Cómo muestro los valores encima de las barras?

Añade nodes near coords a las opciones del eje. Cada barra recibe su valor como etiqueta.

¿Cómo hago que las barras empiecen en cero?

Ya empiezan en cero. Fija ymin=0 en el eje (o xmin=0 para xbar) para quitar el espacio que queda debajo.

Scissor LaTeX compone cada ejemplo de esta página al generar el sitio. Última actualización: 2026-11-07.