Chuyển đến nội dung

Vẽ đồ thị dữ liệu từ tệp CSV

Thêm tệp vào dự án của bạn và viết \addplot table[x=col1, y=col2, col sep=comma] {file.csv}; bên trong một axis của pgfplots.

Vẽ hai cột của một tệp

Tải tệp CSV lên dự án của bạn (hoặc tạo nó ngay tại đó). Dòng đầu tiên đặt tên các cột. x= và y= chọn cột theo tên, và col sep=comma cho biết các giá trị được ngăn cách bằng dấu phẩy.

Trang này dùng một tệp nhỏ, 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

Nhiệt độ theo tháng từ một tệp CSV

LaTeXPhần mở đầu: \usepackage{pgfplots}Mở trong trình soạn (mở trong thẻ mới)
\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}
Dàn trang bởi Scissor LaTeX: Nhiệt độ theo tháng từ một tệp CSV

Tệp trong thư mục cũng hoạt động: hãy viết đường dẫn như trong dự án, ví dụ {data/weather.csv}.

Nhiều cột, cột sai số và giá trị tính toán

Đọc cùng một tệp một lần cho mỗi chuỗi. y error= lấy thanh sai số từ một cột, và y expr= tính một giá trị từ hàng, với \thisrow{name} cho một cột.

Hai chuỗi từ một tệp

LaTeXPhần mở đầu: \usepackage{pgfplots}Mở trong trình soạn (mở trong thẻ mới)
\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}
Dàn trang bởi Scissor LaTeX: Hai chuỗi từ một tệp

Đọc bảng một lần

\pgfplotstableread đọc một tệp vào một macro, mà sau đó mọi \addplot đều có thể dùng. Cách này ngắn gọn hơn khi cùng một bảng cung cấp dữ liệu cho nhiều đồ thị.

\pgfplotstableread và hai đồ thị

LaTeXPhần mở đầu: \usepackage{pgfplots}Mở trong trình soạn (mở trong thẻ mới)
\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}

Dữ liệu bên trong tài liệu: filecontents

Các tập dữ liệu nhỏ có thể nằm ngay trong tệp .tex. filecontents* ghi nội dung của nó thành một tệp mang tên đó, rồi \addplot table đọc tệp này. Tệp nằm trong phần mở đầu, trước \begin{document}.

Dữ liệu được ghi bằng 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}

Ở đây các cột được ngăn cách bằng dấu cách, mặc định của pgfplots, nên không cần col sep.

Các tùy chọn của bảng

Tùy chọnTác dụngTrong Scissor LaTeX
x=name, y=namecột theo tênHoạt động
x index=0, y index=1cột theo số thứ tự, bắt đầu từ 0Hoạt động
col sep=commacũng có space, tab, semicolon, &Hoạt động
header=falsedòng đầu tiên là dữ liệu, không phải tênHoạt động
skip first n=2bỏ qua các dòng đầu tiênHoạt động
x expr=, y expr=tính một giá trị, với \thisrow{name}, \thisrowno{n} hoặc \coordindexHoạt động
y error=, x error=các cột thanh sai sốHoạt động
comment chars=!thêm ký tự chú thích (các dòng # và % luôn được bỏ qua)Hoạt động
\pgfplotstablereadđọc một bảng vào một macroHoạt động
\pgfplotstabletypesetin một bảng thành bảng LaTeXKhông hỗ trợ: bị bỏ qua kèm thông báo

Ô trống, nan và inf được coi là giá trị thiếu và bị bỏ ra.

Khi có lỗi xảy ra

Nếu một tệp .csv được đọc mà không có col sep=comma, Scissor LaTeX vẫn tìm ra các dấu phẩy, nên đồ thị vẫn được vẽ, nhưng thẻ Sự cố đề nghị bạn thêm tùy chọn này. Một bản cài đặt TeX sẽ không đoán, và đồ thị sẽ thất bại ở đó.

Thiếu col sep: vẫn vẽ, kèm lời nhắc

LaTeXPhần mở đầu: \usepackage{pgfplots}Mở trong trình soạn (mở trong thẻ mới)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[x=month, y=temp] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}

Thẻ Sự cố: Add col sep=comma to read data-from-csv-weather.csv so it also works in LaTeX

Một tệp không có trong dự án sẽ khiến đồ thị đó bị bỏ ra. Trục vẫn được vẽ, và thẻ Sự cố nêu tên tệp bị thiếu.

Một tệp bị thiếu

LaTeXPhần mở đầu: \usepackage{pgfplots}Mở trong trình soạn (mở trong thẻ mới)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[col sep=comma] {results.csv};
  \end{axis}
\end{tikzpicture}

Thẻ Sự cố: Data file not in the project: results.csv

Khác biệt so với một bản cài đặt TeX

Mọi thứ ở đây đều là cú pháp pgfplots, nên các tệp cũng biên dịch được trong một bản cài đặt TeX. Tài liệu hướng dẫn: ctan.org/pkg/pgfplots. Về thanh sai số từ các cột, xem thanh sai số.

Hỏi và đáp

Làm thế nào để vẽ đồ thị từ tệp CSV trong LaTeX?

Đặt tệp vào dự án và viết \addplot table[x=a, y=b, col sep=comma] {file.csv}; trong một trục, thay a và b bằng tên cột của bạn.

Tệp CSV của tôi dùng dấu chấm phẩy. Tôi viết gì?

Dùng col sep=semicolon. Với ký tự tab, dùng col sep=tab.

Tôi có thể vẽ một cột theo số thứ tự hàng không?

Có: table[x expr=\coordindex, y=name] dùng 0, 1, 2, v.v. làm giá trị x.

Mọi ví dụ trên trang này đều được Scissor LaTeX dàn trang khi xây dựng trang web. Cập nhật lần cuối 2026-11-07.