> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/vi/theo-linh-vuc/08-pgfplots-package.md).

# gói Pgfplots

## Giới thiệu

Tính năng `pgfplots` gói, dựa trên [`TikZ`](/latex/vi/hinh-va-bang/05-tikz-package.md), là một công cụ trực quan hóa mạnh mẽ và lý tưởng để tạo đồ họa khoa học/kỹ thuật. Ý tưởng cơ bản là bạn cung cấp dữ liệu/công thức đầu vào và `pgfplots` sẽ làm phần còn lại.

### Phần tiền đề của tài liệu

Để sử dụng `pgfplots` gói trong tài liệu của bạn, hãy thêm dòng sau vào phần tiền đề:

`\usepackage{pgfplots}`

Bạn cũng có thể cấu hình hành vi của `pgfplots` trong phần tiền đề của tài liệu. Ví dụ, để thay đổi kích thước của mỗi biểu đồ và đảm bảo khả năng tương thích ngược (khuyến nghị), hãy thêm dòng tiếp theo:

`\pgfplotsset{width=10cm,compat=1.9}`

Điều này thay đổi kích thước của mỗi `pgfplot` hình xuống 10 centimet, điều này là rất lớn; bạn có thể dùng các đơn vị khác (pt, mm, in). Tham số *compat* dùng để mã hoạt động trên phiên bản gói 1.9 hoặc mới hơn.

### Thời gian biên dịch (bối cảnh ngắn gọn)

Khi bộ máy TeX nguyên thủy được hình thành/viết ra, hơn 40 năm trước, nó không được thiết kế cho *trực tiếp* việc tạo đồ họa—những thứ đó sẽ là các tệp do chương trình bên ngoài tạo ra (ví dụ, MetaPost) và được nhập vào tài liệu dàn trang. Sự ra đời của pdfTeX—vốn dựa rất sát trên phần mềm TeX nguyên bản—đã mang lại khả năng tạo đồ họa *trực tiếp* bằng cách sử dụng các lệnh ngôn ngữ TeX tích hợp mới của pdfTeX (gọi là *các nguyên thủy*) có thể xuất ra các toán tử/dữ liệu PDF cần thiết để tạo đồ họa. Sự ra đời của pdfTeX đã dẫn đến việc phát triển các gói đồ họa LaTeX tinh vi, chẳng hạn như `TikZ`, `pgfplots` v.v., có khả năng tạo đồ họa được mã hóa bằng các lệnh LaTeX cấp cao.

Tuy nhiên, ở phía sau, và sâu bên trong bộ máy pdfTeX (và các bộ máy khác), các lệnh đồ họa LaTeX cấp cao đó cần được xử lý bằng cách "chuyển đổi" chúng trở lại các lệnh cấp thấp (nguyên thủy) của bộ máy pdfTeX vốn thực sự tạo ra (xuất ra) các toán tử PDF cần để sinh ra hình ảnh kết quả. Việc xử lý các lệnh đồ họa LaTeX đó—mở rộng và thực thi các lệnh nguyên thủy—có thể tốn một lượng thời gian không nhỏ. Ngay cả một lệnh đồ họa LaTeX cấp cao duy nhất, cùng với dữ liệu tương ứng của nó, cũng có thể cần thực thi lặp đi lặp lại các *nhiều* lệnh TeX cấp thấp (nguyên thủy). Từ góc nhìn của người dùng cuối, các tài liệu chứa nhiều `pgfplots` hình, và/hoặc đồ họa rất phức tạp, có thể mất một khoảng thời gian đáng kể để hiển thị (biên dịch).

### Giảm thời gian biên dịch

Để tăng tốc độ biên dịch tài liệu, bạn có thể cấu hình `pgfplots` gói để xuất các hình ra các tệp PDF riêng biệt rồi sau đó nhập chúng vào tài liệu: biên dịch một lần, rồi tái sử dụng các hình. Để làm điều đó, hãy thêm đoạn mã dưới đây vào phần tiền đề:

```
\usepgfplotslibrary{external}
\tikzexternalize
```

Xem [bài viết trợ giúp này](/latex/vi/cau-hoi-and-tra-loi/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md) để biết thêm chi tiết về cách thiết lập tikz-externalization trong dự án Overleaf của bạn.

## Ví dụ cơ bản (cũng tách các hình ra ngoài)

```latex
\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}

% Chúng ta sẽ tách các hình ra ngoài
\usepgfplotslibrary{external}
\tikzexternalize

\begin{document}

Ví dụ đầu tiên là các biểu thức toán học 2D và 3D được vẽ cạnh nhau.

% Đây là nơi bắt đầu biểu đồ 2D
\begin{tikzpicture}
\begin{axis}
\addplot[color=red]{exp(x)};
\end{axis}
\end{tikzpicture}
% Đây là nơi kết thúc biểu đồ 2D
\hskip 5pt
% Đây là nơi bắt đầu biểu đồ 3D
\begin{tikzpicture}
\begin{axis}
\addplot3[
    surf,
]
{exp(-x^2-y^2)*x};
\end{axis}
\end{tikzpicture}
% Đây là nơi kết thúc biểu đồ 3D

\end{document}
```

[Mở `pgfplots` ví dụ trên Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.25in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%0A%25+We+will+externalize+the+figures%0A%5Cusepgfplotslibrary%7Bexternal%7D%0A%5Ctikzexternalize%0A%0A%5Cbegin%7Bdocument%7D%0A%0AFirst+example+is+2D+and+3D+math+expressions+plotted+side-by-side.%0A%0A%25Here+begins+the+2D+plot%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot%5Bcolor%3Dred%5D%7Bexp%28x%29%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%25Here+ends+the+2D+plot%0A%5Chskip+5pt%0A%25Here+begins+the+3D+plot%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot3%5B%0A++++surf%2C%0A%5D%0A%7Bexp%28-x%5E2-y%5E2%29%2Ax%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%25Here+ends+the+3D+plot%0A%0A%5Cend%7Bdocument%7D)

Hình ảnh sau đây cho thấy kết quả được tạo bởi đoạn mã trên:

![Plgplotsex1OLV2.png](/files/259323ba4d33609f0eaa7aecc2f0537236703e2c)

### Giải thích mã

Bởi vì `pgfplots` dựa trên `tikz` biểu đồ phải nằm trong một `tikzpicture` môi trường. Sau đó, khai báo môi trường `\begin{axis}`, `\end{axis}` sẽ thiết lập tỷ lệ đúng cho biểu đồ—hãy xem [Hướng dẫn tham khảo](#reference-guide) để biết các môi trường trục khác.

Để thêm một biểu đồ thực sự, dùng lệnh `\addplot[color=red]{log(x)};` được dùng. Bên trong dấu ngoặc vuông, `[...]`, có thể truyền một số tùy chọn; ở đây, chúng ta đặt `color` của biểu đồ thành `red`. Dấu ngoặc vuông là bắt buộc; nếu không truyền tùy chọn nào thì hãy để một khoảng trống giữa chúng. Bên trong dấu ngoặc nhọn bạn đặt hàm cần vẽ. Điều quan trọng cần nhớ là lệnh này phải kết thúc bằng dấu chấm phẩy (;).

Để đặt một biểu đồ thứ hai cạnh biểu đồ đầu tiên, hãy khai báo một `tikzpicture` môi trường mới. Đừng chèn một dòng mới, mà thay vào đó là một khoảng trống nhỏ; trong trường hợp này `hskip 10pt` sẽ chèn một khoảng trống rộng 10pt.

Phần còn lại của cú pháp thì giống nhau, ngoại trừ `\addplot3 [surf,]{exp(-x^2-y^2)*x};`. Điều này sẽ thêm một biểu đồ 3D, và tùy chọn `surf` bên trong dấu ngoặc vuông cho biết đây là một biểu đồ bề mặt. Hàm cần vẽ phải được đặt trong dấu ngoặc nhọn. Một lần nữa, đừng quên đặt dấu chấm phẩy (;) ở cuối lệnh.

**Lưu ý**: Nên thực hành tốt là thụt lề mã—xem biểu đồ thứ hai trong ví dụ trên—và thêm dấu phẩy (,) ở cuối mỗi tùy chọn được truyền cho `\addplot`. Bằng cách này, mã dễ đọc hơn và dễ thêm các tùy chọn khác nếu cần.

## Biểu đồ 2D

`pgfplots`Các chức năng vẽ 2D của nó rất phong phú—và bạn có thể tùy chỉnh biểu đồ theo nhu cầu của mình. Tuy nhiên, các tùy chọn mặc định thường cho kết quả rất tốt, vì vậy tất cả những gì bạn cần làm là cung cấp dữ liệu và LaTeX sẽ làm phần còn lại.

### Vẽ các biểu thức toán học

Dưới đây là một ví dụ:

```latex
\begin{tikzpicture}
\begin{axis}[
    axis lines = left,
    xlabel = \(x\),
    ylabel = {\(f(x)\)},
]
% Dưới đây là parabol màu đỏ được định nghĩa
\addplot [
    domain=-10:10,
    samples=100,
    color=red,
]
{x^2 - 2*x - 1};
\addlegendentry{\(x^2 - 2x - 1\)}
% Ở đây parabol màu xanh được định nghĩa
\addplot [
    domain=-10:10,
    samples=100,
    color=blue,
    ]
    {x^2 + 2*x + 1};
\addlegendentry{\(x^2 + 2x + 1\)}

\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ trên Overleaf.](https://www.overleaf.com/docs?engine=\&snip_name=pgfplots+example+2\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.25in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++axis+lines+%3D+left%2C%0A++++xlabel+%3D+%5C%28x%5C%29%2C%0A++++ylabel+%3D+%7B%5C%28f%28x%29%5C%29%7D%2C%0A%5D%0A%25Below+the+red+parabola+is+defined%0A%5Caddplot+%5B%0A++++domain%3D-10%3A10%2C+%0A++++samples%3D100%2C+%0A++++color%3Dred%2C%0A%5D%0A%7Bx%5E2+-+2%2Ax+-+1%7D%3B%0A%5Caddlegendentry%7B%5C%28x%5E2+-+2x+-+1%5C%29%7D%0A%25Here+the+blue+parabola+is+defined%0A%5Caddplot+%5B%0A++++domain%3D-10%3A10%2C+%0A++++samples%3D100%2C+%0A++++color%3Dblue%2C%0A++++%5D%0A++++%7Bx%5E2+%2B+2%2Ax+%2B+1%7D%3B%0A%5Caddlegendentry%7B%5C%28x%5E2+%2B+2x+%2B+1%5C%29%7D%0A%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![Plgplotsex2.png](/files/c9742ef0da6bf0040fb4074e0418f55ad0c44e88)

#### Giải thích mã

Hãy phân tích các lệnh mới từng dòng một:

**các đường trục = bên trái.**

Tùy chọn này sẽ đặt các trục chỉ ở phía trái và phía dưới của biểu đồ, thay vì khung mặc định. Các tùy chọn tùy chỉnh thêm có trong hướng dẫn tham khảo.

**xlabel = (x) và ylabel = {(f(x))}.**

Các tên tham số khá dễ hiểu, chúng cho phép bạn đặt nhãn cho trục ngang và trục dọc. Lưu ý giá trị ylabel nằm giữa dấu ngoặc nhọn; các dấu ngoặc này cho pgfplots biết cách nhóm văn bản. xlabel cũng có thể có ngoặc. Điều này hữu ích cho các nhãn phức tạp có thể làm pgfplots bối rối.

**\addplot.**

Lệnh này sẽ thêm một biểu đồ vào trục; cách dùng chung đã được mô tả ở phần giới thiệu. Ví dụ này có hai tham số mới.

**domain=-10:10.**

Điều này xác định phạm vi giá trị của x.

**samples=100.**

Xác định số điểm trong khoảng được xác định bởi domain. Giá trị samples càng lớn thì đồ thị bạn nhận được càng mịn, nhưng sẽ mất nhiều thời gian hơn để hiển thị.

**\addlegendentry{(x^2 - 2x - 1)}.**

Điều này thêm chú giải để nhận diện hàm x^2 - 2x - 1.

Để thêm một đồ thị khác vào biểu đồ, chỉ cần viết một `\addplot` mục.

### Vẽ từ dữ liệu

Nghiên cứu khoa học thường tạo ra dữ liệu cần được phân tích. Ví dụ tiếp theo cho thấy cách vẽ dữ liệu với *pgfplots*:

```latex
Vẽ từ dữ liệu:

\begin{tikzpicture}
\begin{axis}[
    title={Sự phụ thuộc của độ tan CuSO\(_4\cdot\)5H\(_2\)O theo nhiệt độ},
    xlabel={Nhiệt độ [\textcelsius]},
    ylabel={Độ tan [g trên 100 g nước]},
    xmin=0, xmax=100,
    ymin=0, ymax=120,
    xtick={0,20,40,60,80,100},
    ytick={0,20,40,60,80,100,120},
    legend pos=north west,
    ymajorgrids=true,
    grid style=dashed,
]

\addplot[
    color=blue,
    mark=square,
    ]
    coordinates {
    (0,23.1)(10,27.5)(20,32)(30,37.8)(40,44.6)(60,61.8)(80,83.8)(100,114)
    };
    \legend{CuSO\(_4\cdot\)5H\(_2\)O}

\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ trên Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+example+3\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Btextcomp%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0APlotting+from+data%3A%0A%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++title%3D%7BTemperature+dependence+of+CuSO%5C%28_4%5Ccdot%5C%295H%5C%28_2%5C%29O+solubility%7D%2C%0A++++xlabel%3D%7BTemperature+%5B%5Ctextcelsius%5D%7D%2C%0A++++ylabel%3D%7BSolubility+%5Bg+per+100+g+water%5D%7D%2C%0A++++xmin%3D0%2C+xmax%3D100%2C%0A++++ymin%3D0%2C+ymax%3D120%2C%0A++++xtick%3D%7B0%2C20%2C40%2C60%2C80%2C100%7D%2C%0A++++ytick%3D%7B0%2C20%2C40%2C60%2C80%2C100%2C120%7D%2C%0A++++legend+pos%3Dnorth+west%2C%0A++++ymajorgrids%3Dtrue%2C%0A++++grid+style%3Ddashed%2C%0A%5D%0A%0A%5Caddplot%5B%0A++++color%3Dblue%2C%0A++++mark%3Dsquare%2C%0A++++%5D%0A++++coordinates+%7B%0A++++%280%2C23.1%29%2810%2C27.5%29%2820%2C32%29%2830%2C37.8%29%2840%2C44.6%29%2860%2C61.8%29%2880%2C83.8%29%28100%2C114%29%0A++++%7D%3B%0A++++%5Clegend%7BCuSO%5C%28_4%5Ccdot%5C%295H%5C%28_2%5C%29O%7D%0A++++%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![Plgplotsex3.png](/files/2e37c7588af865f402cfa8e7c57890de304a002c)

#### Giải thích mã

Ở đây có một số lệnh và tham số mới:

**title={Sự phụ thuộc của độ tan CuSO(\_4\cdot)5H(\_2)O theo nhiệt độ}.**

Như bạn có thể đoán, nó gán một tiêu đề cho hình. Tiêu đề sẽ được hiển thị phía trên biểu đồ.

**xmin=0, xmax=100, ymin=0, ymax=120.**

Giới hạn tối thiểu và tối đa của các trục x và y.

**xtick={0,20,40,60,80,100}, ytick={0,20,40,60,80,100,120}.**

Các điểm đặt các mốc. Nếu để trống thì các mốc sẽ được đặt tự động.

**legend pos=north west.**

Vị trí của hộp chú giải. Xem hướng dẫn tham khảo để có thêm tùy chọn.

**ymajorgrids=true.**

Điều này bật/tắt các đường lưới tại vị trí mốc trên trục y. Dùng xmajorgrids để bật các đường lưới trên trục x.

**grid style=dashed.**

Rõ ràng rồi. Để hiển thị các đường lưới nét đứt.

**mark=square.**

Điều này vẽ một dấu hình vuông tại mỗi điểm trong mảng tọa độ. Mỗi dấu sẽ được nối với dấu tiếp theo bằng một đường thẳng.

**coordinates {(0,23.1)(10,27.5)(20,32)...}**

Tọa độ của các điểm cần vẽ. Đây là dữ liệu bạn muốn phân tích bằng đồ họa.

Nếu dữ liệu nằm trong một tệp, như thường là trường hợp; thay vì các lệnh `\addplot` và `coordinates` bạn nên dùng `\addplot table {file_with_the_data.dat}`, các tùy chọn còn lại đều hợp lệ trong môi trường này.

### Biểu đồ phân tán

Biểu đồ phân tán được dùng để biểu diễn thông tin bằng một số kiểu dấu và thường được sử dụng khi tính hồi quy thống kê. Trong ví dụ này, chúng ta sẽ tạo một biểu đồ phân tán bằng dữ liệu chứa trong tệp có tên `scattered_example.dat`, trong đó dữ liệu trông như sau:

```
GPA  ma  ve  co   un
3.45 643 589 3.76 3.52
2.78 558 512 2.87 2.91
2.52 583 503 2.54 2.4
3.67 685 602 3.83 3.47
3.24 592 538 3.29 3.47
2.1 562 486 2.64 2.37
...
```

Biểu đồ phân tán của chúng ta dùng hai cột đầu tiên của dữ liệu:

```latex
\begin{tikzpicture}
\begin{axis}[
    enlargelimits=false,
]
\addplot+[
    only marks,
    scatter,
    mark=halfcircle*,
    mark size=2.9pt]
table[meta=ma]
{scattered_example.dat};
\end{axis}
\end{tikzpicture}
```

![Scattered.png](/files/dd76f4ab9805db85cddee875747291209cc9bb53)

[Mở một ví dụ dự án biểu đồ phân tán trong Overleaf (chứa tệp dữ liệu `scattered_example.dat`).](https://www.overleaf.com/project/new/template/20099?id=68399290\&templateName=Scatter+plot+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

#### Giải thích mã

Các tham số truyền cho `axis` và `addplot` các môi trường cũng có thể được dùng trong một biểu đồ dữ liệu, ngoại trừ `scatter`. Dưới đây là mô tả mã:

**enlarge limits=false**

Điều này sẽ thu nhỏ các trục sao cho điểm có giá trị lớn nhất và nhỏ nhất nằm ở mép của biểu đồ.

**only marks**

Rất rõ ràng, sẽ đặt một dấu ở mỗi điểm.

**scatter**

Khi dùng scatter, các điểm được tô màu tùy theo một giá trị; màu được xác định bởi tham số meta được giải thích bên dưới.

**mark=halfcircle**\*

Kiểu dấu dùng cho mỗi điểm, hãy xem hướng dẫn tham khảo để biết danh sách các giá trị có thể dùng.

**mark size=2.9pt**

Kích thước của mỗi dấu, có thể dùng các đơn vị khác nhau.

**table\[meta=ma]{scattered\_example.dat};**

Ở đây lệnh table cho LaTeX biết rằng dữ liệu cần vẽ nằm trong một tệp. Tham số meta=ma được truyền để chọn cột xác định màu của mỗi điểm. Bên trong dấu ngoặc nhọn là tên của tệp dữ liệu.

### Biểu đồ cột

Biểu đồ cột (còn gọi là biểu đồ thanh và bar plot) được dùng để hiển thị dữ liệu đã thu thập, chủ yếu là dữ liệu thống kê về một quần thể nào đó. Biểu đồ cột trong `pgfplots` rất dễ cấu hình, nhưng ở đây chúng ta sẽ trình bày một ví dụ đơn giản:

```latex
\begin{tikzpicture}
\begin{axis}[
	x tick label style={
		/pgf/number format/1000 sep=},
	ylabel=Year,
	enlargelimits=0.05,
	legend style={at={(0.5,-0.1)},
	anchor=north,legend columns=-1},
	ybar interval=0.7,
]
\addplot
	coordinates {(2012,408184) (2011,408348)
		 (2010,414870) (2009,412156)};
\addplot
	coordinates {(2012,388950) (2011,393007)
		(2010,398449) (2009,395972)};
\legend{Men,Women}
\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ mã biểu đồ cột trong Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+bar+chart+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Btextcomp%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A%09x+tick+label+style%3D%7B%0A%09%09%2Fpgf%2Fnumber+format%2F1000+sep%3D%7D%2C%0A%09ylabel%3DYear%2C%0A%09enlargelimits%3D0.05%2C%0A%09legend+style%3D%7Bat%3D%7B%280.5%2C-0.1%29%7D%2C%0A%09anchor%3Dnorth%2Clegend+columns%3D-1%7D%2C%0A%09ybar+interval%3D0.7%2C%0A%5D%0A%5Caddplot+%0A%09coordinates+%7B%282012%2C408184%29+%282011%2C408348%29%0A%09%09+%282010%2C414870%29+%282009%2C412156%29%7D%3B%0A%5Caddplot+%0A%09coordinates+%7B%282012%2C388950%29+%282011%2C393007%29+%0A%09%09%282010%2C398449%29+%282009%2C395972%29%7D%3B%0A%5Clegend%7BMen%2CWomen%7D%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![Barchartsexample.png](/files/f0edefb183c66f653ba8f249323da421d106b0da)

#### Giải thích mã

Hình bắt đầu với khai báo ([đã giải thích trước đó](#introduction)) của các `tikzpicture` và `axis` môi trường, nhưng `axis` khai báo này có một số tham số mới:

**x tick label style={/pgf/number format/1000 sep=}**

Đoạn mã này định nghĩa một kiểu đầy đủ cho biểu đồ. Với kiểu này, bạn có thể bao gồm nhiều lệnh \addplot trong môi trường axis này; chúng sẽ khớp và trông đẹp mắt cùng nhau mà không cần chỉnh thêm (tham số ybar được mô tả bên dưới là bắt buộc để điều này hoạt động).

**enlargelimits=0.05.**

Mở rộng giới hạn trong biểu đồ cột là cần thiết vì loại biểu đồ này thường cần thêm một chút khoảng trống phía trên cột để nhìn đẹp hơn và/hoặc thêm nhãn. Số 0.05 ở đây là tương đối so với tổng chiều cao của biểu đồ.

**legend style={at={(0.5,-0.2)}, anchor=north,legend columns=-1}**

Một lần nữa, phần này thường sẽ hoạt động tốt trong hầu hết các trường hợp. Nếu cần, hãy đổi giá trị -0.2 để đặt chú giải gần hơn/xa hơn với trục x.

**ybar interval=0.7,**

Độ dày của mỗi cột. 1 nghĩa là các cột sẽ nằm cạnh nhau không có khoảng cách, và 0 nghĩa là không có cột, chỉ có các đường thẳng đứng.

Tính năng `coordinates` trong loại biểu đồ này xác định điểm gốc của cột và chiều cao của nó.

Các nhãn trên trục y sẽ hiển thị tối đa 4 chữ số. Nếu các số bạn đang làm việc lớn hơn 9999 `pgfplots` sẽ dùng cùng ký hiệu như trong ví dụ.

## Biểu đồ 3D

`pgfplots` có khả năng vẽ 3D như bạn có thể mong đợi từ phần mềm vẽ đồ thị.

### Vẽ các biểu thức toán học

Có một ví dụ đơn giản về điều này ở [phần giới thiệu](#introduction), hãy cùng làm một thứ phức tạp hơn một chút:

```latex
\begin{tikzpicture}
\begin{axis}[
    title=Ví dụ sử dụng tham số mesh,
    ẩn trục,
    colormap/cool,
]
\addplot3[
    mesh,
    samples=50,
    domain=-8:8,
]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\addlegendentry{\(\frac{sin(r)}{r}\)}
\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ 3D trong Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+3D+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++title%3DExample+using+the+mesh+parameter%2C%0A++++hide+axis%2C%0A++++colormap%2Fcool%2C%0A%5D%0A%5Caddplot3%5B%0A++++mesh%2C%0A++++samples%3D50%2C%0A++++domain%3D-8%3A8%2C%0A%5D%0A%7Bsin%28deg%28sqrt%28x%5E2%2By%5E2%29%29%29%2Fsqrt%28x%5E2%2By%5E2%29%7D%3B%0A%5Caddlegendentry%7B%5C%28%5Cfrac%7Bsin%28r%29%7D%7Br%7D%5C%29%7D%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![Pgfplots3dexample.png](/files/ac43a7c075705c367fd00cd2382eb938e3576ca2)

#### Giải thích mã

Phần lớn các lệnh ở đây đã được giải thích, nhưng có 3 điều mới:

**ẩn trục**

Tùy chọn này trong môi trường axis tự giải thích, các trục sẽ không được hiển thị.

**colormap/cool**

Là bảng màu được dùng trong biểu đồ. Hãy xem hướng dẫn tham khảo để biết thêm các bảng màu.

**mesh**

Tùy chọn này cũng tự giải thích, đồng thời hãy xem tham số surf trong ví dụ giới thiệu.

**Lưu ý**: Khi làm việc với các hàm lượng giác `pgfplots` dùng độ làm đơn vị mặc định; nếu góc ở dạng radian (như trong ví dụ này) thì bạn phải dùng `deg` hàm để chuyển sang độ.

### Biểu đồ đường đồng mức

Trong `pgfplots` có thể vẽ biểu đồ đường đồng mức, nhưng dữ liệu phải được tính trước bởi một chương trình bên ngoài. Hãy xem một ví dụ:

```latex
\begin{tikzpicture}
\begin{axis}
[
    title={Biểu đồ đường đồng mức, nhìn từ trên xuống},
    view={0}{90}
]
\addplot3[
    contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}
]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ biểu đồ đường đồng mức trong Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+contour+plot+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5B%0A++++title%3D%7BContour+plot%2C+view+from+top%7D%2C%0A++++view%3D%7B0%7D%7B90%7D%0A%5D%0A%5Caddplot3%5B%0A++++contour+gnuplot%3D%7Blevels%3D%7B0.8%2C+0.4%2C+0.2%2C+-0.2%7D%7D%0A%5D%0A%7Bsin%28deg%28sqrt%28x%5E2%2By%5E2%29%29%29%2Fsqrt%28x%5E2%2By%5E2%29%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![Contourplotexample.png](/files/602b22dcdd611c3f40c765c03b2949d1fba603fd)

#### Giải thích mã

Đây là một biểu đồ của một số đường đồng mức cho cùng phương trình dùng ở phần trước. Giá trị của `title` tham số nằm trong dấu ngoặc nhọn vì nó chứa dấu phẩy, vì vậy chúng ta dùng dấu ngoặc nhóm để tránh nhầm lẫn với các tham số khác được truyền cho `\begin{axis}` khai báo. Có hai lệnh mới:

**view={0}{90}**

Điều này thay đổi góc nhìn của biểu đồ. Tham số được truyền cho môi trường axis, nghĩa là nó có thể dùng trong bất kỳ kiểu biểu đồ 3D nào khác. Giá trị đầu tiên là phép quay, tính bằng độ, quanh trục z; giá trị thứ hai là quay góc nhìn quanh trục x. Trong ví dụ này, khi chúng ta kết hợp phép quay 0° quanh trục z và phép quay 90° quanh trục x, ta sẽ có góc nhìn của biểu đồ từ trên xuống.

**contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}**

Dòng mã này làm hai việc: Thứ nhất, nó bảo LaTeX dùng phần mềm bên ngoài gnuplot để tính các đường đồng mức; điều này hoạt động tốt trong Overleaf nhưng nếu bạn muốn dùng lệnh này trong bản cài LaTeX trên máy của mình thì trước tiên bạn phải cài gnuplot (matlab cũng sẽ hoạt động, trong trường hợp đó hãy viết matlab thay vì gnuplot trong lệnh). Thứ hai, tham số con levels là một danh sách các giá trị mức cao độ nơi các đường đồng mức sẽ được tính.

### Vẽ một bề mặt từ dữ liệu

Để vẽ một tập dữ liệu thành một bề mặt 3D, tất cả những gì chúng ta cần là tọa độ của từng điểm. Các tọa độ này có thể là một tập không có thứ tự hoặc, trong trường hợp này, là một ma trận:

```latex
\begin{tikzpicture}
\begin{axis}
\addplot3[
    surf,
]
coordinates {
(0,0,0) (0,1,0) (0,2,0)

(1,0,0) (1,1,0.6) (1,2,0.7)

(2,0,0) (2,1,0.7) (2,2,1.8)
};
\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ bề mặt 3D trong Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=plotting+a+surface+from+data+with+pgfplots\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot3%5B%0A++++surf%2C%0A%5D+%0Acoordinates+%7B%0A%280%2C0%2C0%29+%280%2C1%2C0%29+%280%2C2%2C0%29%0A%0A%281%2C0%2C0%29+%281%2C1%2C0.6%29+%281%2C2%2C0.7%29%0A%0A%282%2C0%2C0%29+%282%2C1%2C0.7%29+%282%2C2%2C1.8%29%0A%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![3dsurfacedata.png](/files/d90fec07a13e793a417f28d6159a8d8cee7a3851)

#### Giải thích dữ liệu

Các điểm truyền cho tham số `coordinates` được coi là nằm trong một ma trận 3 × 3, dùng một dòng trống làm dấu phân cách cho từng hàng của ma trận.

Tất cả các tùy chọn cho biểu đồ 3D trong bài này đều áp dụng cho các bề mặt dữ liệu.

### Biểu đồ tham số

Cú pháp cho các biểu đồ tham số hơi khác một chút. Hãy xem ví dụ:

```latex
\begin{tikzpicture}
\begin{axis}
    [
    view={60}{30},
    ]
\addplot3[
    domain=0:5*pi,
    samples = 60,
    samples y=0,
]
({sin(deg(x))},
{cos(deg(x))},
{x});
\end{axis}
\end{tikzpicture}
```

[Mở `pgfplots` ví dụ biểu đồ tham số trong Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+parametric+plot+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A++++%5B%0A++++view%3D%7B60%7D%7B30%7D%2C%0A++++%5D%0A%5Caddplot3%5B%0A++++domain%3D0%3A5%2Api%2C%0A++++samples+%3D+60%2C%0A++++samples+y%3D0%2C%0A%5D%0A%28%7Bsin%28deg%28x%29%29%7D%2C%0A%7Bcos%28deg%28x%29%29%7D%2C%0A%7Bx%7D%29%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Kết quả từ đoạn mã này được hiển thị trong hình dưới đây—phần tiền đề tài liệu LaTeX sẽ được thêm tự động khi bạn mở liên kết:

![Parametricplot.png](/files/cf31efe62da0d4fbf147beda63430c08fd0dfd6d)

#### Giải thích mã

Chỉ có hai điều mới trong ví dụ này: thứ nhất là `samples y=0` để ngăn `pgfplots` khỏi nối các điểm cực trị của đường xoắn ốc; và thứ hai là cách hàm cần vẽ được truyền cho môi trường `addplot3` Mỗi hàm tham số được nhóm trong dấu ngoặc nhọn và ba tham số được phân tách bằng dấu ngoặc đơn.

## Hướng dẫn tham khảo

| Lệnh/Tùy chọn/Môi trường | Mô tả                                                                                                   | Các giá trị có thể có                                                                                                                                                                                                                                                                                           |
| ------------------------ | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **axis**                 | Biểu đồ thông thường với tỷ lệ tuyến tính                                                               |                                                                                                                                                                                                                                                                                                                 |
| **semilogxaxis**         | tỷ lệ logarit cho x và tỷ lệ thường cho y                                                               |                                                                                                                                                                                                                                                                                                                 |
| **semilogyaxis**         | tỷ lệ logarit cho y và tỷ lệ thường cho x                                                               |                                                                                                                                                                                                                                                                                                                 |
| **loglogaxis**           | tỷ lệ logarit cho cả trục x và y                                                                        |                                                                                                                                                                                                                                                                                                                 |
| **axis lines**           | thay đổi cách các trục được vẽ. Mặc định là '*hộp*                                                      | box, left, middle, center, right, none                                                                                                                                                                                                                                                                          |
| **legend pos**           | vị trí của hộp chú giải                                                                                 | south west, south east, north west, north east, outer north east                                                                                                                                                                                                                                                |
| **mark**                 | kiểu dấu dùng trong việc vẽ dữ liệu. Khi dùng một ký tự đơn, hình dạng ký tự rất giống với dấu thực tế. | \*, x , +, \|, o, asterisk, star, 10-pointed star, oplus, oplus\*, otimes, otimes\*, square, square\*, triangle, triangle\*, diamond, halfdiamond\*, halfsquare\*, right\*, left\*, Mercedes star, Mercedes star flipped, halfcircle, halfcircle\*, pentagon, pentagon\*, cubes. (cubes only work on 3d plots). |
| **colormap**             | bảng màu dùng trong biểu đồ, có thể tùy biến nhưng có một số bảng màu định sẵn                          | hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet.                                                                                                                                                                                                                                      |

## Đọc thêm

Để biết thêm thông tin, xem:

* [Sử dụng màu trong LaTeX](/latex/vi/dinh-dang/13-using-colors-in-latex.md)
* [Gói TikZ](/latex/vi/hinh-va-bang/05-tikz-package.md)
* [Tách riêng pgfplots và tikzpictures](/latex/vi/cau-hoi-and-tra-loi/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md)
* [Chèn hình ảnh](/latex/vi/chu-de-khac/27-inserting-images.md)
* [Danh sách bảng biểu và hình vẽ](/latex/vi/hinh-va-bang/03-lists-of-tables-and-figures.md)
* [Định vị hình ảnh và bảng](/latex/vi/hinh-va-bang/02-positioning-images-and-tables.md)
* [Vẽ sơ đồ trực tiếp trong LaTeX](/latex/vi/hinh-va-bang/04-picture-environment.md)
* [Tính năng **pgfplots** tài liệu gói](http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf).
* [Các gói TikZ và PGF: Sổ tay cho phiên bản 3.0.0](http://mirror.utexas.edu/ctan/graphics/pgf/base/doc/pgfmanual.pdf)
* [Các ví dụ TikZ và PGF tại TeXample.net](http://www.texample.net/tikz/examples/all/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/vi/theo-linh-vuc/08-pgfplots-package.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
