Tenho alguns dados armazenados em arquivo que gostaria de plotar com pgfplots. Os dados são armazenados em linhas, ou seja, o arquivo se parece com isto:
a 1 2 3 4 5
b 6 7 8 9 0
c 2 4 6 8 0
...
No entanto, o Pgfplots espera que os dados sejam em colunas. Para resolver isso, transponho a tabela usando \pgfplotstabletranspose
. No entanto, isso parece ter problemas com os títulos das linhas.
O exemplo mínimo a seguir mostra o que consegui até agora.
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\pgfplotstableread{
x 1 2 3 4 5
y 1 4 9 16 25
}\datatable;
\pgfplotstabletranspose\datatable{\datatable};
\addplot table {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
A saída desejada é o seguinte gráfico:
Infelizmente, recebo o seguinte erro:
Erro matemático do pacote PGF: não foi possível analisar a entrada 'x' como um número de ponto flutuante, desculpe.
(Curiosamente, ao usar -interaction=nonstopmode
o gráfico é gerado conforme desejado, mas o erro é irritante...)
Posso dizer de alguma forma pgfplots
que a primeira coluna contém os títulos das linhas para me livrar das mensagens de erro?
Responder1
É necessário treinar \pgfplotstabletranspose
para manter os nomes das colunas.
Adicione uma linha fictícia aos dados, contendo os valores colnames 0 1 2 3 4
(embora colnames
possa ser substituído basicamente por qualquer coisa). Ligar para
\addplot table[x=xrow,y=yrow] {\otherdatatable};
(Usei outra macro para a tabela transposta. Não tenho certeza se usar a mesma macro não seria saudável)
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\pgfplotstableread{%
colnames 0 1 2 3 4
xrow 1 2 3 4 5
yrow 1 4 9 16 25
}\datatable;
\pgfplotstabletranspose[colnames from=colnames]\otherdatatable{\datatable};
\addplot table[x=xrow,y=yrow] {\otherdatatable};
\end{axis}
\end{tikzpicture}
\end{document}
Usei xrow
e yrow
para evitar uma possível confusão ( x=x,y=y
), já que não conheço o funcionamento de \pgfplotstable
etc.