Pular para o conteúdo

Plotando dados de um arquivo CSV

Adicione o arquivo ao seu projeto e escreva \addplot table[x=col1, y=col2, col sep=comma] {file.csv}; dentro de um axis do pgfplots.

Plote duas colunas de um arquivo

Envie o arquivo CSV para o seu projeto (ou crie-o lá). A primeira linha dá nome às colunas. x= e y= as escolhem pelo nome, e col sep=comma diz que os valores são separados por vírgulas.

Esta página usa um arquivo pequeno, 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 mês a partir de um arquivo CSV

LaTeXPreâmbulo: \usepackage{pgfplots}Abrir no editor (abre em uma nova aba)
\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}
Renderizado pelo Scissor LaTeX: Temperatura por mês a partir de um arquivo CSV

Arquivos dentro de uma pasta também funcionam: escreva o caminho como está no projeto, por exemplo {data/weather.csv}.

Várias colunas, colunas de erro e valores calculados

Leia o mesmo arquivo uma vez por série. y error= tira as barras de erro de uma coluna, e y expr= calcula um valor a partir da linha, com \thisrow{name} para uma coluna.

Duas séries de um mesmo arquivo

LaTeXPreâmbulo: \usepackage{pgfplots}Abrir no editor (abre em uma nova aba)
\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}
Renderizado pelo Scissor LaTeX: Duas séries de um mesmo arquivo

Lendo uma tabela uma única vez

\pgfplotstableread lê um arquivo para dentro de uma macro, que qualquer \addplot pode usar depois. Fica mais curto quando a mesma tabela alimenta vários gráficos.

\pgfplotstableread e dois gráficos

LaTeXPreâmbulo: \usepackage{pgfplots}Abrir no editor (abre em uma nova aba)
\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}

Dados dentro do documento: filecontents

Conjuntos de dados pequenos podem ficar no próprio arquivo .tex. filecontents* grava o seu conteúdo como um arquivo com aquele nome, que o \addplot table então lê. O bloco fica no preâmbulo, antes de \begin{document}.

Dados escritos com 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}

Aqui as colunas são separadas por espaços, o padrão do pgfplots, então col sep não é necessário.

Opções de tabela

OpçãoO que fazNo Scissor LaTeX
x=name, y=namecolunas pelo nomeFunciona
x index=0, y index=1colunas pelo número, a partir de 0Funciona
col sep=commatambém space, tab, semicolon, &Funciona
header=falsea primeira linha é de dados, não de nomesFunciona
skip first n=2ignora as primeiras linhasFunciona
x expr=, y expr=calcula um valor, com \thisrow{name}, \thisrowno{n} ou \coordindexFunciona
y error=, x error=colunas de barras de erroFunciona
comment chars=!mais caracteres de comentário (linhas com # e % são sempre puladas)Funciona
\pgfplotstablereadlê uma tabela para dentro de uma macroFunciona
\pgfplotstabletypesetimprime uma tabela como tabela LaTeXNão suportado: pulado com uma mensagem

Células vazias, nan e inf são tratados como valores ausentes e ficam de fora.

Quando algo dá errado

Se um arquivo .csv for lido sem col sep=comma, o Scissor LaTeX encontra as vírgulas mesmo assim, então o gráfico é desenhado, mas a aba Problemas pede que você acrescente a opção. Uma instalação do TeX não adivinharia, e o gráfico falharia lá.

Sem col sep: desenhado, com um lembrete

LaTeXPreâmbulo: \usepackage{pgfplots}Abrir no editor (abre em uma nova aba)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[x=month, y=temp] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}

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

Um arquivo que não está no projeto deixa aquele gráfico de fora. Os eixos são desenhados mesmo assim, e a aba Problemas indica o arquivo que falta.

Um arquivo ausente

LaTeXPreâmbulo: \usepackage{pgfplots}Abrir no editor (abre em uma nova aba)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[col sep=comma] {results.csv};
  \end{axis}
\end{tikzpicture}

Aba Problemas: Data file not in the project: results.csv

O que muda em relação a uma instalação do TeX

Tudo aqui é sintaxe do pgfplots, então os arquivos também compilam numa instalação do TeX. Manual: ctan.org/pkg/pgfplots. Para barras de erro a partir de colunas, veja barras de erro.

Perguntas e respostas

Como ploto um arquivo CSV em LaTeX?

Coloque o arquivo no projeto e escreva \addplot table[x=a, y=b, col sep=comma] {file.csv}; num axis, com os nomes das suas colunas no lugar de a e b.

Meu CSV usa ponto e vírgula. O que escrevo?

Use col sep=semicolon. Para tabulações, use col sep=tab.

Posso plotar uma coluna em função do número da linha?

Sim: table[x expr=\coordindex, y=name] usa 0, 1, 2 e assim por diante como valores de x.

Cada exemplo desta página é composto pelo Scissor LaTeX quando o site é gerado. Última atualização: 2026-11-07.