Przejdź do treści

Wykresy danych z pliku CSV

Dodaj plik do projektu i napisz \addplot table[x=col1, y=col2, col sep=comma] {file.csv}; wewnątrz axis pgfplots.

Wykres dwóch kolumn pliku

Prześlij plik CSV do projektu (albo utwórz go w nim). Pierwszy wiersz nazywa kolumny. x= i y= wybierają je po nazwie, a col sep=comma mówi, że wartości oddzielają przecinki.

Ta strona korzysta z małego pliku 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 w poszczególnych miesiącach z pliku CSV

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}
Złożone przez Scissor LaTeX: Temperatura w poszczególnych miesiącach z pliku CSV

Pliki w folderze również działają: zapisz ścieżkę tak jak w projekcie, na przykład {data/weather.csv}.

Kilka kolumn, kolumny błędów i wartości obliczane

Wczytaj ten sam plik raz na każdą serię. y error= bierze słupki błędów z kolumny, a y expr= oblicza wartość z wiersza, z \thisrow{name} dla kolumny.

Dwie serie z jednego pliku

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}
Złożone przez Scissor LaTeX: Dwie serie z jednego pliku

Jednorazowe wczytanie tabeli

\pgfplotstableread wczytuje plik do makra, z którego może potem korzystać każdy \addplot. To krótszy zapis, gdy ta sama tabela zasila kilka wykresów.

\pgfplotstableread i dwa wykresy

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}

Dane wewnątrz dokumentu: filecontents

Małe zbiory danych mogą znajdować się w samym pliku .tex. filecontents* zapisuje swoją zawartość jako plik o podanej nazwie, który potem odczytuje \addplot table. Plik stoi w preambule, przed \begin{document}.

Dane zapisane za pomocą 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}

Tutaj kolumny są oddzielone spacjami, co jest domyślnym ustawieniem pgfplots, więc col sep nie jest potrzebne.

Opcje tabeli

OpcjaCo robiW Scissor LaTeX
x=name, y=namekolumny po nazwieDziała
x index=0, y index=1kolumny po numerze, od 0Działa
col sep=commatakże space, tab, semicolon, &Działa
header=falsepierwszy wiersz to dane, nie nazwyDziała
skip first n=2pomija pierwsze wierszeDziała
x expr=, y expr=oblicza wartość, z \thisrow{name}, \thisrowno{n} lub \coordindexDziała
y error=, x error=kolumny słupków błędówDziała
comment chars=!dodatkowe znaki komentarza (wiersze z # i % są zawsze pomijane)Działa
\pgfplotstablereadwczytuje tabelę do makraDziała
\pgfplotstabletypesetwypisuje tabelę jako tabelę LaTeXNieobsługiwane: pomijane z komunikatem

Puste komórki, nan i inf są traktowane jako brakujące wartości i pomijane.

Gdy coś pójdzie nie tak

Jeśli plik .csv zostanie wczytany bez col sep=comma, Scissor LaTeX i tak znajdzie przecinki, więc wykres zostanie narysowany, ale karta Problemy poprosi o dodanie tej opcji. Instalacja TeX niczego by nie zgadywała, a wykres by się tam nie udał.

Brak col sep: narysowane, z przypomnieniem

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[x=month, y=temp] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}

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

Plik, którego nie ma w projekcie, powoduje pominięcie danego wykresu. Oś i tak jest rysowana, a karta Problemy podaje nazwę brakującego pliku.

Brakujący plik

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[col sep=comma] {results.csv};
  \end{axis}
\end{tikzpicture}

Karta Problemy: Data file not in the project: results.csv

Czym różni się od instalacji TeX

Wszystko tutaj to składnia pgfplots, więc pliki kompilują się także w instalacji TeX. Dokumentacja: ctan.org/pkg/pgfplots. Słupki błędów z kolumn opisuje strona słupków błędów.

Pytania i odpowiedzi

Jak narysować plik CSV w LaTeX?

Umieść plik w projekcie i napisz w osi \addplot table[x=a, y=b, col sep=comma] {file.csv};, z nazwami swoich kolumn w miejsce a i b.

Mój CSV używa średników. Co mam napisać?

Użyj col sep=semicolon. Dla tabulatorów użyj col sep=tab.

Czy mogę narysować kolumnę względem numeru wiersza?

Tak: table[x expr=\coordindex, y=name] używa 0, 1, 2 i tak dalej jako wartości x.

Każdy przykład na tej stronie jest składany przez Scissor LaTeX podczas budowania witryny. Ostatnia aktualizacja: 2026-11-07.