Saltar al contenido

Gráficos con datos de un archivo CSV

Añade el archivo a tu proyecto y escribe \addplot table[x=col1, y=col2, col sep=comma] {file.csv}; dentro de un axis de pgfplots.

Dibujar dos columnas de un archivo

Sube el archivo CSV a tu proyecto (o créalo allí). La primera línea nombra las columnas. x= e y= las eligen por nombre, y col sep=comma indica que los valores van separados por comas.

Esta página usa un archivo pequeño, data-from-csv-weather.csv:

CSV
month,temp,rain,sd
1,1.2,44,0.8
2,2.0,38,0.7
3,5.6,41,0.9
...
12,2.3,46,0.8

Temperatura por mes desde un archivo CSV

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[xlabel={Month}, ylabel={Temperature ($^\circ$C)}, xtick={1,...,12}]
    \addplot table[x=month, y=temp, col sep=comma] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}
Compuesto por Scissor LaTeX: Temperatura por mes desde un archivo CSV

Los archivos dentro de una carpeta también funcionan: escribe la ruta tal como está en el proyecto, por ejemplo {data/weather.csv}.

Varias columnas, columnas de error y valores calculados

Lee el mismo archivo una vez por serie. y error= toma las barras de error de una columna, e y expr= calcula un valor a partir de la fila, con \thisrow{name} para una columna.

Dos series de un mismo archivo

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[xlabel={Month}, ylabel={Value}, legend pos=north west, ymin=0]
    \addplot+[error bars/.cd, y dir=both, y explicit]
      table[x=month, y=temp, y error=sd, col sep=comma] {data-from-csv-weather.csv};
    \addplot+[mark=none, dashed]
      table[x=month, y expr=\thisrow{rain}/2, col sep=comma] {data-from-csv-weather.csv};
    \legend{Temperature ($^\circ$C), Rain / 2 (mm)}
  \end{axis}
\end{tikzpicture}
Compuesto por Scissor LaTeX: Dos series de un mismo archivo

Leer una tabla una sola vez

\pgfplotstableread lee un archivo en una macro, que luego puede usar cualquier \addplot. Es más corto cuando la misma tabla alimenta varios gráficos.

\pgfplotstableread y dos gráficos

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\pgfplotstableread[col sep=comma]{data-from-csv-weather.csv}\weather
\begin{tikzpicture}
  \begin{axis}[ybar, bar width=6pt, ymin=0, xlabel={Month}, ylabel={Rain (mm)},
               xtick={1,...,12}, enlarge x limits=0.06]
    \addplot table[x=month, y=rain] {\weather};
  \end{axis}
\end{tikzpicture}

Datos dentro del documento: filecontents

Los conjuntos de datos pequeños pueden vivir en el propio archivo .tex. filecontents* escribe su contenido como un archivo con ese nombre, que luego lee \addplot table. El archivo va en el preámbulo, antes de \begin{document}.

Datos escritos con filecontents*

\documentclass{article}
\usepackage{pgfplots}
\begin{filecontents*}{speed.dat}
t   v
0   0
1   4.4
2   8.1
3   11.0
4   13.2
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[xlabel={Time (s)}, ylabel={Speed (m/s)}]
    \addplot table[x=t, y=v] {speed.dat};
  \end{axis}
\end{tikzpicture}
\end{document}

Aquí las columnas van separadas por espacios, el separador predeterminado de pgfplots, así que no hace falta col sep.

Opciones de tabla

OpciónQué haceEn Scissor LaTeX
x=name, y=namecolumnas por nombreFunciona
x index=0, y index=1columnas por número, empezando en 0Funciona
col sep=commatambién space, tab, semicolon, &Funciona
header=falsela primera línea son datos, no nombresFunciona
skip first n=2ignora las primeras líneasFunciona
x expr=, y expr=calculan un valor, con \thisrow{name}, \thisrowno{n} o \coordindexFunciona
y error=, x error=columnas de barras de errorFunciona
comment chars=!más caracteres de comentario (las líneas con # y % siempre se saltan)Funciona
\pgfplotstablereadlee una tabla en una macroFunciona
\pgfplotstabletypesetimprime una tabla como tabla de LaTeXNo se admite: se omite con un mensaje

Las celdas vacías, nan e inf se tratan como valores ausentes y se omiten.

Cuando algo sale mal

Si un archivo .csv se lee sin col sep=comma, Scissor LaTeX encuentra igualmente las comas, así que el gráfico se dibuja, pero la pestaña Problemas te pide que añadas la opción. Una instalación de TeX no lo adivinaría, y el gráfico fallaría allí.

Falta col sep: se dibuja, con un recordatorio

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[x=month, y=temp] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}

Pestaña Problemas: Add col sep=comma to read data-from-csv-weather.csv so it also works in LaTeX

Un archivo que no está en el proyecto deja fuera ese gráfico. El eje se sigue dibujando, y la pestaña Problemas nombra el archivo que falta.

Un archivo que falta

LaTeXPreámbulo: \usepackage{pgfplots}Abrir en el editor (se abre en una pestaña nueva)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[col sep=comma] {results.csv};
  \end{axis}
\end{tikzpicture}

Pestaña Problemas: Data file not in the project: results.csv

Diferencias con una instalación de TeX

Todo lo de aquí es sintaxis de pgfplots, así que los archivos también compilan en una instalación de TeX. Manual: ctan.org/pkg/pgfplots. Para barras de error desde columnas, consulta barras de error.

Preguntas y respuestas

¿Cómo dibujo un archivo CSV en LaTeX?

Pon el archivo en el proyecto y escribe \addplot table[x=a, y=b, col sep=comma] {file.csv}; en un eje, con los nombres de tus columnas en lugar de a y b.

Mi CSV usa punto y coma. ¿Qué escribo?

Usa col sep=semicolon. Para tabuladores, usa col sep=tab.

¿Puedo dibujar una columna frente al número de fila?

Sí: table[x expr=\coordindex, y=name] usa 0, 1, 2, etc. como valores x.

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