У меня есть некоторые данные, сохраненные в файле, которые я хотел бы построить с помощью pgfplots. Данные хранятся построчно, то есть файл выглядит примерно так:
a 1 2 3 4 5
b 6 7 8 9 0
c 2 4 6 8 0
...
Однако Pgfplots ожидает, что данные будут по столбцам. Чтобы решить эту проблему, я транспонирую таблицу с помощью \pgfplotstabletranspose
. Однако, похоже, это имеет проблемы с заголовками строк.
Следующий минимальный пример показывает, чего мне удалось достичь на данный момент.
\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}
Желаемый результат — следующий график:
К сожалению, я получаю следующую ошибку:
Ошибка пакета PGF Math: не удалось проанализировать входное значение «x» как число с плавающей точкой, извините.
(Интересно, что при использовании -interaction=nonstopmode
график все равно формируется как надо, но ошибка раздражает...)
Можно ли как-то узнать pgfplots
, что первый столбец содержит заголовки строк, чтобы избавиться от сообщений об ошибках?
решение1
Необходимо обучиться \pgfplotstabletranspose
поддерживать названия столбцов.
Добавьте фиктивную строку к данным, содержащим значения colnames 0 1 2 3 4
(хотя colnames
в принципе их можно заменить чем угодно). Вызовите
\addplot table[x=xrow,y=yrow] {\otherdatatable};
(Я использовал другой макрос для транспонированной таблицы. Я не уверен, что использование того же макроса не будет полезным)
\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}
Я использовал xrow
и , yrow
чтобы предотвратить возможную путаницу ( x=x,y=y
), поскольку я не знаю внутреннего устройства \pgfplotstable
etc.