gnuplot 是一個用於產生趨勢圖和其他圖形的工具。它通常用於收集基於時間的資料,但是不限於此;也可以使用待用資料。gnuplot 可以以批模式運行或動態運行,結果由圖形查看程式或 網頁瀏覽器顯示。本文示範如何使用 gnuplot 和批檔案為從 sar 或其他資料來源收集的資料產生圖形。gnuplot 有許多命令選項,可以通過 set 操作符使用它們。但是,要想使用線或框產生圖形,需要對文檔有所瞭解。
在本文中,我將使用 Web 服務器提供圖形。
gnuplot 概述
gnuplot 把原始表格式資料轉換為圖形檔案。流行的格式是 png、pdf 和 jpeg,然後可以把它們動態地或直接地傳遞給 X 終端、網頁或通用的圖形查看程式。還可以把映像匯入文件。使用命令介面與 gnuplot 互動,使用 “set” 命令指定映像的格式和顯示方式。這通常包括映像的大小、使用的顏色、刻度、x, y 座標和輸出映像名。然後,使用 plot 命令通過 gnuplot 引擎實際產生映像。還可以使用 splot 命令繪製 3D 映像。儘管可以使用命令介面以互動方式執行命令,但是最好的方法是使用設定檔,這樣就可以通過 shell 'here' 文檔方法使用檔案中的變數(如果需要的話),從而重用設定檔。然後,通過管道把設定檔與 gnuplot 串連起來以產生影像檔。如果設定檔中有錯誤,在這個過程中會顯示這些錯誤,並反白錯誤的位置。產生影像檔之後,就可以顯示它們了。
與用於產生圖形的任何資料收集過程一樣,在把資料傳遞給 gnuplot 之前,必須對收集的資料做一些篩選。這可能包括刪除資料檔案中頭尾不需要的資訊;sed 和 awk 有助於滿足任何文本篩選需求。
安裝 gnuplot
可以從 AIX? 5L Source Packages 網站下載 rpm 形式的 gnuplot 4.2:http://www.perzl.org/aix/index.php。
對於本文中的樣本,除了 gnuplot,還需要一個正在啟動並執行 http 伺服器。
也可以從本文後面或 AIX toolbox 網站下載所需的依賴庫和 http 伺服器。
在安裝 gnuplot 之前,一定要安裝下面的 rpm 庫,因為 gnuplot 需要這些庫:
fontconfig-2.7.2-1.aix5.1.ppc.rpmexpat-2.0.1-2.aix5.1.ppc.rpm freetype2-2.3.9-1.aix5.1.ppc.rpmzlib-1.2.3-5.aix5.1.ppc.rpm libpng-1.2.40-1.aix5.1.ppc.rpmgd-2.0.35-4.aix5.1.ppc.rpmlibjpeg-7-1.aix5.1.ppc.rpmlibXpm-3.5.7-2.aix5.1.ppc.rpm gettext-0.17-1.aix5.1.ppc.rpmglib2-2.20.5-1.aix5.1.ppc.rpm |
使用以下命令列出已經安裝的 rpm:
最後,安裝 gnuplot 包:
# rpm -ivh gnuplot-4.2.4-1.aix5.1.ppc.rpm |
運行 gnuplot 以測試它。這會顯示 gnuplot 命令介面(用 quit 命令退出介面):
$ gnuplot G N U P L O T Version 4.2 patchlevel 4 last modified Sep 2008 System: 5.3 Copyright (C) 1986 - 1993, 1998, 2004, 2007, 2008 Thomas Williams, Colin Kelley and many others Type `help` to access the on-line reference manual. The gnuplot FAQ is available from http://www.gnuplot.info/faq/ Send bug reports and suggestions to <http://sourceforge.net/projects/gnuplot>Terminal type set to 'unknown'gnuplot> |
用 sar 建立圖形
sar 可能是最常用的收集效能資料的方法,所以我們以它作為樣本。清單 1(sarx.txt)是通過運行 sar 收集的資料,資料收集時間為 5 小時,每小時收集一次,輸出已經經過篩選。
清單 1. sarx.txt
14:10:50 33 27 4 36 4.0015:10:50 29 14 3 28 4.0016:10:50 35 21 1 31 4.0017:10:49 38 29 2 39 4.0018:10:40 42 29 3 35 4.00 |
接下來,建立一個檔案以包含產生圖形所需的所有 gnuplot 命令。可以給這個檔案起任何名字;在本文中,我把它命名為 sarx.conf。
為了能夠產生映像,必須告訴 gnuplot 圖形檔案應該採用什麼格式以及應該如何顯示。清 單 2(sarx.conf)包含執行 set 操作的設定檔。以 # 字元開頭的行是注釋。我們仔細看看 清 單 2。
set terminal png truecolor |
首先設定終端類型,這告訴 gnuplot 產生的映像應該採用什麼格式。本文使用 png (Portable Network Graphics) 格式。
set output "sarimage.png" |
接下來,告訴 gnuplot 實際的輸出影像檔名。在這裡,檔案名稱為 sarimage.png。
在產生圖形時,需要指定資料的 x 和 y 軸範圍。這個樣本讓 gnuplot 自己計算範圍值。但是,可以修改這個選項(稍後示範)。
set xdata timeset timefmt "%H:%M:%S" |
因為這個樣本使用日期值作為資料的參照點,需要告訴 gnuplot 日期資料的格式。在 清 單 1 sarx.txt 中,日期格式為:
Hour:Minute:Seconds
根據 UNIX 日期標記法,日期變數應該放在雙引號中。常用的其他格式包括:
%d - day of month 1 -31%m - month of year 1 -12%y - year 0-99%b - three character of month name , ie: jan ,feb%B - name of month |
如果日期列採用 Hour-Minute 格式,就用 : set timefmt ″%H-%M″ 表示。
在顯示這個圖形時,繪製出的資料應該是一條平滑的資料線。常用的其他繪製格式包括:dots、boxes、errorbars、 candlesticks。
plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys" |
接下來,使用 plot 命令實際繪製或產生圖形。首先,指定資料輸入檔案名稱,然後告訴 gnuplot 要繪製哪些列。在這個樣本中,使用第 1 列作為 x 軸,繪製第 2 列資料,標題為 “%user”;然後繪製第 3 列,標題為 “%sys”。標題(即標籤)顯示在圖形的右上方。在繪製時,第 2 列和第 3 列使用第 1 列作為 x 值。plot 命令中的每個 ‘using’ 語句由逗號分隔。下一節討論為什麼要使用兩個單引號。
產生影像檔的命令格式為:
cat < conf file> | gnuplot |
對於本文,我使用:
$ cat sarx.conf | gnuplot |
現在會產生 sarimage.png 檔案。為了查看這個映像,把這個檔案複製到 Web 服務器檔案系統中的 htdocs 目錄中。
圖 1(sarimage)顯示使用提供的樣本資料在 網頁瀏覽器中看到的輸出。
清單 2. sarx.conf
#sarx.confset terminal png truecolorset output "sarimage.png"set autoscaleset xdata timeset timefmt "%H:%M:%S"set style data linesplot "sarx.txt" using 1:2 title "%user", '' using 1:3 title "%sys" |
圖 1. sarimage
繪圖 選項的表示
在 plot 命令中可以使用縮寫。例如,在最初的 plot 命令後面,其他 plot 命令選項都可以縮寫,用選項的第一個字母表示。但是,對於本文,我只用縮寫表示輸入檔案,即使用兩個單引號表示輸入檔案 (sarx1.txt)。下面詳細解釋一下。第一個樣本是本文中使用的標記法,第二個樣本是縮寫標記法,第三個樣本是不使用任何縮寫的完整命令語句。這三 個樣本產生相同的輸出。
plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"plot "sarx1.txt" using 1:2 title "%user", '' u 1:3 t "%sys"plot "sarx1.txt" using 1:2 title "%user",\″sarx1.txt'' using 1:3 title "%sys" |
在向其他使用者顯示圖形時,有時候應該包含明確的標籤和標題,以便使用者瞭解資料的意義。為了包含 x 和 y 標籤,應該使用 xlabel 和 ylabel 命令並把標籤文本放在引號中:
set ylabel " y line info here"set xlabel " x line info here" |
使用 title 命令添加圖形的標題:
set title "main title info here" |
在產生圖形時,gnuplot 使用自己的預設顏色。在預設情況下,在白色背景上產生圖形;這對於可能要列印的圖形是有意義的。但是,可以使用顏色編碼指定任何顏色,顏色編碼以字母 x 開頭,用十六進位表示。十六進位編碼的格式為:
在 Google 上搜尋 ‘hex color codes’ 可以找到十六進位的顏色編碼錶。
覆蓋 gnuplot 預設顏色的次序為:
backgroundborder XYplotting lines |
淺灰色的十六進位表示為:C9C9C9。
可以使用以下命令產生淺灰色背景的圖形:
注意,在以上命令中必須替換終端類型 png 的 truecolor 選項,這會覆蓋 gnuplot 使用的預設顏色。因為我沒有指定其他顏色以覆蓋預設設定,所以對於圖形的其他顏色,gnuplot 仍然使用自己的預設顏色。
在查看圖形時,使用網格作為參照點也非常有用。下面的命令使用 grid 選項讓 gnuplot 在圖形上加上網格:
可以隱式地設定 x 和 y 座標;但是,要確保指定的範圍不小於資料的範圍,否則無法繪製圖形。對於 清 單 1 中的樣本資料,x 座標(時間)的範圍是從 14:10:50 到 18:10:40。
y 座標(第 2 列和第 3 列)的範圍是從 14 到 50。
可以根據這些資訊指定自己的範圍。下面的樣本使用的 x 範圍從 14:00 到 18:15,y 範圍從 10 到 50。
set xrange ["14:00:00" : "18:15:00"]set yrange ["10:00" : "50:00" ] |
在 清 單 3 中使用這些修改,產生的圖形輸出見 圖 2。
清單 3. sarx2.conf
#sarx2.confset terminal png xC9C9C9set output "sarimage.png"set autoscaleset xdata timeset timefmt "%H:%M:%S"set ylabel "Performance"set xlabel "Time"set title "Sar Output Example"set xrange ["14:00:00":"18:15:00"]set yrange ["10:00" : "50:00" ]set gridset style data linesplot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys" |
圖 2. sarimage2
gnuplot 和柱狀圖
還可以使用柱狀圖或框圖表示資料,有時候這比使用待用資料更合適。清單 4 是從一台 AIX 機器獲得的使用者組使用者總數。第 1 列包含 AIX 組名,第 2 列包含成員總數。
清單 4. grpdata.txt
staff 54apps 22sybgrp 12db2grp1 29dasdm 8dstage 21dsgrp 8batch 28db2prd 1 |
要想使用柱狀圖,只需告訴 gnuplot 應該使用柱狀圖產生圖形:
set style data histograms |