Построчное построение данных с помощью pgfplots

Построчное построение данных с помощью pgfplots

У меня есть некоторые данные, сохраненные в файле, которые я хотел бы построить с помощью 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), поскольку я не знаю внутреннего устройства \pgfplotstableetc.

введите описание изображения здесь

Связанный контент