TikZ、PGFPlots 與專業繪圖
TikZ 用於示意圖、流程圖和幾何圖;PGFPlots 建立在 TikZ 之上,適合座標軸和資料圖。兩者生成的是可縮放的向量圖,適合需要與 LaTeX 字型、公式和版式保持一致的場景。
EasyLaTeX 編譯器設定:XeLaTeX + ctex;TikZ 需要 tikz,資料圖需要 pgfplots。較複雜的圖會明顯增加編譯時間。
何時選擇程式碼繪圖
| 需求 | 推薦方式 |
|---|---|
| 真實照片、掃描件、軟體螢幕擷取畫面 | 插入現成圖片 |
| 流程圖、結構圖、幾何示意圖 | TikZ |
| 函式曲線、實驗資料、誤差棒 | PGFPlots |
| 複雜科研插圖或已有專業圖形檔案 | 使用專業軟體匯出 PDF 後插入;SVG 先轉換為 PDF 或適合的點陣圖 |
程式碼繪圖的優勢是可復現、可版本控制和字型一致;它不是所有圖形的替代品。複雜插圖應選擇最適合的資料處理與繪圖工具,再以穩定格式納入文件。
TikZ 的最小示意圖
在導言區載入 TikZ:
\usepackage{tikz}下面繪製座標軸和一條線段:
\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 新增標註。
節點與箭頭
流程圖常用節點和箭頭。先定義樣式,再重複使用:
\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 庫:
\usetikzlibrary{positioning}樣式集中定義可以讓流程圖保持一致。節點文字過長時,應縮短標籤或指定 text width,不要任由節點互相重疊。
PGFPlots 的最小資料圖
載入 PGFPlots 並固定相容版本:
\usepackage{pgfplots}\pgfplotsset{compat=1.18}下面使用內嵌座標繪製一條曲線:
\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:
time,velocity0,01,12,43,9然後使用:
\addplot table [x=time, y=velocity, col sep=comma] {data/velocity.csv};將資料與繪圖程式碼分開,便於檢查、更新和復現實驗結果。CSV 檔案中的列名必須與 x=、y= 指定的名稱一致。
圖形放入文件
TikZ 與 PGFPlots 生成的內容也應放進 figure 環境,從而獲得圖題、標籤和交叉引用:
\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 上傳到正文專案中作為圖片插入。
完整示例
\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}