首先我先參考 TikZ & PGF 的參考手冊,裏面的 Plots and Functions 一章提到「如果要使用科學座標軸簡單的繪製函數或圖形的話,可以使用 pgfplots 套件或 (TikZ的) datavisualization 命令」。當然我是比較懶的,不太想另外花時間研究新的 pgfplots 套件。仗著只了解一點點 TikZ 語法的基礎下,決定來研究看看 datavisualization 命令該如何使用?
使用方式很簡單,但我一下子就遇到麻煩了。因為我需要繪製的資料是類似底下這種結構 :
# Time Sensor_A B C # # For demo 0 2 2 2 1 2 2 3 2 3 4 7 3 4 6 11 ...
使用 datavisualization 命令很難繪製多行 (column) 資料。而且該套件也不允許檔案內有井字號 (hash mark) 開頭的註解,這個限制讓我必須修改原始測量資料才行。這樣做很麻煩。
因此我決定放棄 datavisualization 套件,改用 pgfplots 套件。 pgfplots 套件的用法就簡單多了。pgfplots 也是基於 TikZ 的套庫,因此只要載入 pgfplots 之後,就會自動載入 tikz 套件庫的。
使用方法先在 LyX 文件設定的前文區(preamble) 設定:
\usepackage{pgfplots}接著在文件中插入 TeX Code:
\begin{tikzpicture} \begin{axis} \addplot table [x index=0, y index=1] {demo2.dat} ; \addplot table [x index=0, y index=2] {demo2.dat} ; \addplot table [x index=0, y index=3] {demo2.dat} ; \end{axis} \end{tikzpicture}這樣就可以繪製出最基本的圖案了。另外,在 LyX 中若以「預覽框」包住 tikz 程式碼的部份,就可以直接在 LyX 文件中預覽繪圖結果。這功能非常的方便 :D 如下圖
在 LyX 中以預覽框包住 pgfplots 繪圖程式碼 |
直接預覽 pgfplots 繪圖結果 |
基本圖形缺少了一些解說文字及裝飾元件(例如圖例)。參考 pgfplots 的手冊,可以微調輸出的圖案。改變之後的程式碼如下:
\begin{tikzpicture} \begin{axis}[ title ={pgfplots Demo Plot}, xlabel={$x$}, ylabel={$y$}, minor y tick num=5, minor x tick num=5, grid=major, legend entries={A, B, C}, enlargelimits=false, legend pos=north west, ] \addplot table [x index=0, y index=1] {demo2.dat} ; \addplot table [x index=0, y index=2] {demo2.dat} ; \addplot table [x index=0, y index=3] {demo2.dat} ; \end{axis} \end{tikzpicture}
最終一個簡單排版結果如下:
當然 pgfplots 能做的設定還非常多,更多設定請參考 pgfplots 使用手冊。
附錄
由於我一開始嘗試使用 TikZ 的 datavisualization 命令繪圖,但不成功。在此也紀錄一下其用法。基本的 datavisualization 套件庫使用方式為:
\usepackage{tikz} \usetikzlibrary{datavisualization}接著插入 TeX-Code, 輸入以下的程式碼:
\begin{tikzpicture} \datavisualization[scientific axes, % all axes={grid}, visualize as smooth line] data [ headline={x y}, separator=\space, read from file=test1.dat]; \end{tikzpicture}
基本的 format=table 的選項,只能夠處理兩個 column 的 data, 因此如果一個檔案內超過兩個 column, 多出的資料沒辦法用 datavisualization 畫出來,必須變成兩個不同的檔案才行。
範例檔案: tikzDemo.tar.gz
沒有留言:
張貼留言