Перейти к содержанию

Графики по данным из файла CSV

Добавьте файл в проект и напишите \addplot table[x=col1, y=col2, col sep=comma] {file.csv}; внутри axis pgfplots.

График по двум столбцам файла

Загрузите файл CSV в проект (или создайте его там). Первая строка называет столбцы. x= и y= выбирают их по имени, а col sep=comma говорит, что значения разделены запятыми.

На этой странице используется небольшой файл 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

Температура по месяцам из файла CSV

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\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}
Свёрстано в Scissor LaTeX: Температура по месяцам из файла CSV

Файлы в папках тоже работают: пишите путь так, как он выглядит в проекте, например {data/weather.csv}.

Несколько столбцов, столбцы погрешностей и вычисляемые значения

Читайте один и тот же файл по разу на каждую серию. y error= берёт планки погрешностей из столбца, а y expr= вычисляет значение по строке, где \thisrow{name} обозначает столбец.

Две серии из одного файла

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\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}
Свёрстано в Scissor LaTeX: Две серии из одного файла

Одно чтение таблицы

\pgfplotstableread читает файл в макрос, который затем может использовать любой \addplot. Так короче, когда одна таблица питает несколько графиков.

\pgfplotstableread и два графика

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\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}

Данные внутри документа: filecontents

Небольшие наборы данных могут жить прямо в файле .tex. filecontents* записывает своё содержимое в файл с этим именем, который потом читает \addplot table. Окружение стоит в преамбуле, до \begin{document}.

Данные, записанные через 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}

Здесь столбцы разделены пробелами, как принято в pgfplots по умолчанию, поэтому col sep не нужен.

Параметры таблицы

ПараметрЧто делаетВ Scissor LaTeX
x=name, y=nameстолбцы по имениРаботает
x index=0, y index=1столбцы по номеру, начиная с 0Работает
col sep=commaтакже space, tab, semicolon, &Работает
header=falseпервая строка содержит данные, а не именаРаботает
skip first n=2пропустить первые строкиРаботает
x expr=, y expr=вычислить значение через \thisrow{name}, \thisrowno{n} или \coordindexРаботает
y error=, x error=столбцы планок погрешностейРаботает
comment chars=!дополнительные символы комментария (строки с # и % пропускаются всегда)Работает
\pgfplotstablereadчитает таблицу в макросРаботает
\pgfplotstabletypesetпечатает таблицу как таблицу LaTeXНе поддерживается: пропускается с сообщением

Пустые ячейки, nan и inf считаются пропущенными значениями и не рисуются.

Когда что-то идёт не так

Если файл .csv читается без col sep=comma, Scissor LaTeX всё равно находит запятые, и график рисуется, но вкладка «Проблемы» просит добавить параметр. Установленный TeX не стал бы угадывать, и там график не получился бы.

Нет col sep: график рисуется с напоминанием

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[x=month, y=temp] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}

Вкладка «Проблемы»: Add col sep=comma to read data-from-csv-weather.csv so it also works in LaTeX

Если файла нет в проекте, этот график пропускается. Ось всё равно рисуется, а вкладка «Проблемы» называет отсутствующий файл.

Отсутствующий файл

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[col sep=comma] {results.csv};
  \end{axis}
\end{tikzpicture}

Вкладка «Проблемы»: Data file not in the project: results.csv

Чем это отличается от установленного TeX

Всё здесь записано в синтаксисе pgfplots, поэтому файлы компилируются и в установленном TeX. Руководство: ctan.org/pkg/pgfplots. О планках погрешностей из столбцов читайте на странице планок погрешностей.

Вопросы и ответы

Как построить график по файлу CSV в LaTeX?

Положите файл в проект и напишите в оси \addplot table[x=a, y=b, col sep=comma] {file.csv};, подставив имена своих столбцов вместо a и b.

В моём CSV разделитель точка с запятой. Что писать?

Используйте col sep=semicolon. Для табуляций используйте col sep=tab.

Можно ли построить столбец в зависимости от номера строки?

Да: table[x expr=\coordindex, y=name] использует 0, 1, 2 и так далее как значения x.

Каждый пример на этой странице верстается в Scissor LaTeX при сборке сайта. Обновлено 2026-11-07.