跳至主要內容
EasyLaTeXDocs

TikZ、PGFPlots 與專業繪圖

TikZ 用於示意圖、流程圖和幾何圖;PGFPlots 建立在 TikZ 之上,適合座標軸和資料圖。兩者生成的是可縮放的向量圖,適合需要與 LaTeX 字型、公式和版式保持一致的場景。

EasyLaTeX 編譯器設定:XeLaTeX + ctex;TikZ 需要 tikz,資料圖需要 pgfplots。較複雜的圖會明顯增加編譯時間。

何時選擇程式碼繪圖

需求推薦方式
真實照片、掃描件、軟體螢幕擷取畫面插入現成圖片
流程圖、結構圖、幾何示意圖TikZ
函式曲線、實驗資料、誤差棒PGFPlots
複雜科研插圖或已有專業圖形檔案使用專業軟體匯出 PDF 後插入;SVG 先轉換為 PDF 或適合的點陣圖

程式碼繪圖的優勢是可復現、可版本控制和字型一致;它不是所有圖形的替代品。複雜插圖應選擇最適合的資料處理與繪圖工具,再以穩定格式納入文件。

TikZ 的最小示意圖

在導言區載入 TikZ:

LaTeX
\usepackage{tikz}

下面繪製座標軸和一條線段:

LaTeX
\begin{tikzpicture}  \draw[->] (0,0) -- (4,0) node[right] {$x$};  \draw[->] (0,0) -- (0,3) node[above] {$y$};  \draw[blue,thick] (0,0) -- (3,2);\end{tikzpicture}

座標單位預設為釐米附近的 TikZ 畫布單位;\draw 描述線條,方括號中提供樣式,node 新增標註。

節點與箭頭

流程圖常用節點和箭頭。先定義樣式,再重複使用:

LaTeX
\begin{tikzpicture}[  box/.style={draw, rounded corners, minimum width=2.5cm, minimum height=8mm},  arrow/.style={->, thick}]  \node[box] (input) {輸入資料};  \node[box, right=1.5cm of input] (process) {處理};  \node[box, right=1.5cm of process] (output) {輸出結果};  \draw[arrow] (input) -- (process);  \draw[arrow] (process) -- (output);\end{tikzpicture}

上述 right=... of ... 語法需要 TikZ 的 positioning 庫:

LaTeX
\usetikzlibrary{positioning}

樣式集中定義可以讓流程圖保持一致。節點文字過長時,應縮短標籤或指定 text width,不要任由節點互相重疊。

PGFPlots 的最小資料圖

載入 PGFPlots 並固定相容版本:

LaTeX
\usepackage{pgfplots}\pgfplotsset{compat=1.18}

下面使用內嵌座標繪製一條曲線:

LaTeX
\begin{tikzpicture}  \begin{axis}[    xlabel={時間(s)},    ylabel={速度(m/s)},    grid=major  ]    \addplot coordinates {(0,0) (1,1) (2,4) (3,9)};  \end{axis}\end{tikzpicture}

axis 負責座標軸、刻度、標籤和網格,\addplot 負責一條資料序列。座標軸名稱和單位應寫清楚,顏色與線型不能是區分多條曲線的唯一資訊。

從表格資料讀取

資料較多時,儲存為 CSV 檔案,例如 data/velocity.csv:

csv
time,velocity0,01,12,43,9

然後使用:

LaTeX
\addplot table [x=time, y=velocity, col sep=comma] {data/velocity.csv};

將資料與繪圖程式碼分開,便於檢查、更新和復現實驗結果。CSV 檔案中的列名必須與 x=、y= 指定的名稱一致。

圖形放入文件

TikZ 與 PGFPlots 生成的內容也應放進 figure 環境,從而獲得圖題、標籤和交叉引用:

LaTeX
\begin{figure}[tbp]  \centering  % tikzpicture 或 axis 放在這裡  \caption{速度隨時間變化}  \label{fig:velocity}\end{figure}

這與插入外部圖片的工作流程相同。圖題說明圖展示了什麼、資料來自哪裡、誤差如何表示;程式碼本身不替代圖題。

常見問題

Environment tikzpicture undefined

確認導言區已經載入 \usepackage{tikz}。使用節點定位語法時還需 \usetikzlibrary{positioning}。

Environment axis undefined

確認載入的是 \usepackage{pgfplots},而不是僅載入 TikZ。axis 環境屬於 PGFPlots。

圖形編譯很慢

減少不必要的取樣點和圖層,儘量從資料檔案讀取已經處理好的資料。大型繪圖可另建繪圖專案,在平台編譯並下載 PDF,再把該 PDF 上傳到正文專案中作為圖片插入。

完整示例

LaTeX
\documentclass[UTF8,a4paper,12pt]{ctexart}\ctexset{contentsname={目錄},listfigurename={插圖目錄},listtablename={表格目錄},figurename={圖},tablename={表}}\usepackage{pgfplots}\pgfplotsset{compat=1.18}​\begin{document}​\begin{figure}[tbp]  \centering  \begin{tikzpicture}    \begin{axis}[      width=0.75\linewidth,      xlabel={時間(s)},      ylabel={速度(m/s)},      grid=major    ]      \addplot[blue,thick,mark=*] coordinates {        (0,0) (1,1) (2,4) (3,9)      };    \end{axis}  \end{tikzpicture}  \caption{速度隨時間變化}  \label{fig:velocity}\end{figure}​\end{document}