【转载】使用 gnuplot 在网页中显示数据
來源:http://www.ibm.com/developerworks/cn/aix/library/au-gnuplot/
簡介
gnuplot 是一個用于生成趨勢圖和其他圖形的工具。它通常用于收集基于時間的數(shù)據(jù),但是不限于此;也可以使用靜態(tài)數(shù)據(jù)。gnuplot 可以以批模式運(yùn)行或動態(tài)運(yùn)行,結(jié)果由圖形查看程序或 Web 瀏覽器顯示。本文演示如何使用 gnuplot 和批文件為從 sar 或其他數(shù)據(jù)源收集的數(shù)據(jù)生成圖形。gnuplot 有許多命令選項,可以通過 set 操作符使用它們。但是,要想使用線或框生成圖形,需要對文檔有所了解。
在本文中,我將使用 Web 服務(wù)器提供圖形。
回頁首
gnuplot 概述
gnuplot 把原始表格數(shù)據(jù)轉(zhuǎn)換為圖形文件。流行的格式是 png、pdf 和 jpeg,然后可以把它們動態(tài)地或直接地傳遞給 X 終端、網(wǎng)頁或通用的圖形查看程序。還可以把圖像導(dǎo)入文檔。使用命令界面與 gnuplot 交互,使用 “set” 命令指定圖像的格式和顯示方式。這通常包括圖像的大小、使用的顏色、刻度、x, y 坐標(biāo)和輸出圖像名。然后,使用 plot 命令通過 gnuplot 引擎實(shí)際生成圖像。還可以使用 splot 命令繪制 3D 圖像。盡管可以使用命令界面以交互方式執(zhí)行命令,但是最好的方法是使用配置文件,這樣就可以通過 shell 'here' 文檔方法使用文件中的變量(如果需要的話),從而重用配置文件。然后,通過管道把配置文件與 gnuplot 連接起來以生成圖像文件。如果配置文件中有錯誤,在這個過程中會顯示這些錯誤,并突出顯示錯誤的位置。生成圖像文件之后,就可以顯示它們了。
與用于生成圖形的任何數(shù)據(jù)收集過程一樣,在把數(shù)據(jù)傳遞給 gnuplot 之前,必須對收集的數(shù)據(jù)做一些篩選。這可能包括刪除數(shù)據(jù)文件中頭尾不需要的信息;sed 和 awk 有助于滿足任何文本篩選需求。
回頁首
安裝 gnuplot
可以從 AIX? 5L Source Packages 網(wǎng)站下載 rpm 形式的 gnuplot 4.2:http://www.perzl.org/aix/index.php。
對于本文中的示例,除了 gnuplot,還需要一個正在運(yùn)行的 http 服務(wù)器。
也可以從本文后面或 AIX toolbox 網(wǎng)站下載所需的依賴庫和 http 服務(wù)器。
在安裝 gnuplot 之前,一定要安裝下面的 rpm 庫,因為 gnuplot 需要這些庫:
fontconfig-2.7.2-1.aix5.1.ppc.rpm expat-2.0.1-2.aix5.1.ppc.rpm freetype2-2.3.9-1.aix5.1.ppc.rpm zlib-1.2.3-5.aix5.1.ppc.rpm libpng-1.2.40-1.aix5.1.ppc.rpm gd-2.0.35-4.aix5.1.ppc.rpm libjpeg-7-1.aix5.1.ppc.rpm libXpm-3.5.7-2.aix5.1.ppc.rpm gettext-0.17-1.aix5.1.ppc.rpm glib2-2.20.5-1.aix5.1.ppc.rpm使用以下命令列出已經(jīng)安裝的 rpm:
# rpm –qa最后,安裝 gnuplot 包:
# rpm -ivh gnuplot-4.2.4-1.aix5.1.ppc.rpm運(yùn)行 gnuplot 以測試它。這會顯示 gnuplot 命令界面(用 quit 命令退出界面):
$ gnuplotG N U P L O TVersion 4.2 patchlevel 4last modified Sep 2008System: 5.3Copyright (C) 1986 - 1993, 1998, 2004, 2007, 2008Thomas Williams, Colin Kelley and many othersType `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/gnu plot> Terminal type set to 'unknown' gnuplot>回頁首
用 sar 創(chuàng)建圖形
sar 可能是最常用的收集性能數(shù)據(jù)的方法,所以我們以它作為示例。清單 1(sarx.txt)是通過運(yùn)行 sar 收集的數(shù)據(jù),數(shù)據(jù)收集時間為 5 小時,每小時收集一次,輸出已經(jīng)經(jīng)過篩選。
清單 1. sarx.txt
14:10:50 33 27 4 36 4.00 15:10:50 29 14 3 28 4.00 16:10:50 35 21 1 31 4.00 17:10:49 38 29 2 39 4.00 18:10:40 42 29 3 35 4.00接下來,創(chuàng)建一個文件以包含生成圖形所需的所有 gnuplot 命令。可以給這個文件起任何名字;在本文中,我把它命名為 sarx.conf。
為了能夠生成圖像,必須告訴 gnuplot 圖形文件應(yīng)該采用什么格式以及應(yīng)該如何顯示。清單 2(sarx.conf)包含執(zhí)行 set 操作的配置文件。以 # 字符開頭的行是注釋。我們仔細(xì)看看 清單 2。
set terminal png truecolor首先設(shè)置終端類型,這告訴 gnuplot 生成的圖像應(yīng)該采用什么格式。本文使用 png (Portable Network Graphics) 格式。
set output "sarimage.png"接下來,告訴 gnuplot 實(shí)際的輸出圖像文件名。在這里,文件名為 sarimage.png。
set autoscale在生成圖形時,需要指定數(shù)據(jù)的 x 和 y 軸范圍。這個示例讓 gnuplot 自己計算范圍值。但是,可以修改這個選項(稍后演示)。
set xdata time set timefmt "%H:%M:%S"因為這個示例使用日期值作為數(shù)據(jù)的參照點(diǎn),需要告訴 gnuplot 日期數(shù)據(jù)的格式。在 清單 1 sarx.txt 中,日期格式為:
Hour:Minute:Seconds
根據(jù) UNIX 日期表示法,日期變量應(yīng)該放在雙引號中。常用的其他格式包括:
%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″ 表示。
set style data lines在顯示這個圖形時,繪制出的數(shù)據(jù)應(yīng)該是一條平滑的數(shù)據(jù)線。常用的其他繪制格式包括:dots、boxes、errorbars、candlesticks。
plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"接 下來,使用 plot 命令實(shí)際繪制或生成圖形。首先,指定數(shù)據(jù)輸入文件名,然后告訴 gnuplot 要繪制哪些列。在這個示例中,使用第 1 列作為 x 軸,繪制第 2 列數(shù)據(jù),標(biāo)題為 “%user”;然后繪制第 3 列,標(biāo)題為 “%sys”。標(biāo)題(即標(biāo)簽)顯示在圖形的右上角。在繪制時,第 2 列和第 3 列使用第 1 列作為 x 值。plot 命令中的每個 ‘using’ 語句由逗號分隔。下一節(jié)討論為什么要使用兩個單引號。
生成圖像文件的命令格式為:
cat < conf file> | gnuplot對于本文,我使用:
$ cat sarx.conf | gnuplot現(xiàn)在會生成 sarimage.png 文件。為了查看這個圖像,把這個文件復(fù)制到 Web 服務(wù)器文件系統(tǒng)中的 htdocs 目錄中。
圖 1(sarimage)顯示使用提供的示例數(shù)據(jù)在 Web 瀏覽器中看到的輸出。
清單 2. sarx.conf
#sarx.conf set terminal png truecolor set output "sarimage.png" set autoscale set xdata time set timefmt "%H:%M:%S" set style data lines plot "sarx.txt" using 1:2 title "%user", '' using 1:3 title "%sys"圖 1. sarimage
回頁首
繪圖選項的表示
在 plot 命令中可以使用縮寫。例如,在最初的 plot 命令后面,其他 plot 命令選項都可以縮寫,用選項的第一個字母表示。但是,對于本文,我只用縮寫表示輸入文件,即使用兩個單引號表示輸入文件 (sarx1.txt)。下面詳細(xì)解釋一下。第一個示例是本文中使用的表示法,第二個示例是縮寫表示法,第三個示例是不使用任何縮寫的完整命令語句。這三 個示例產(chǎn)生相同的輸出。
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"在向其他用戶顯示圖形時,有時候應(yīng)該包含明確的標(biāo)簽和標(biāo)題,以便用戶了解數(shù)據(jù)的意義。為了包含 x 和 y 標(biāo)簽,應(yīng)該使用 xlabel 和 ylabel 命令并把標(biāo)簽文本放在引號中:
set ylabel " y line info here" set xlabel " x line info here"使用 title 命令添加圖形的標(biāo)題:
set title "main title info here"在生成圖形時,gnuplot 使用自己的默認(rèn)顏色。在默認(rèn)情況下,在白色背景上生成圖形;這對于可能要打印的圖形是有意義的。但是,可以使用顏色編碼指定任何顏色,顏色編碼以字母 x 開頭,用十六進(jìn)制表示。十六進(jìn)制編碼的格式為:
xrrggbb在 Google 上搜索 ‘hex color codes’ 可以找到十六進(jìn)制的顏色編碼表。
覆蓋 gnuplot 默認(rèn)顏色的次序為:
background border X Y plotting lines淺灰色的十六進(jìn)制表示為:C9C9C9。
可以使用以下命令生成淺灰色背景的圖形:
set terminal png xC9C9C9注意,在以上命令中必須替換終端類型 png 的 truecolor 選項,這會覆蓋 gnuplot 使用的默認(rèn)顏色。因為我沒有指定其他顏色以覆蓋默認(rèn)設(shè)置,所以對于圖形的其他顏色,gnuplot 仍然使用自己的默認(rèn)顏色。
在查看圖形時,使用網(wǎng)格作為參照點(diǎn)也非常有用。下面的命令使用 grid 選項讓 gnuplot 在圖形上加上網(wǎng)格:
set grid可以隱式地設(shè)置 x 和 y 坐標(biāo);但是,要確保指定的范圍不小于數(shù)據(jù)的范圍,否則無法繪制圖形。對于 清單 1 中的示例數(shù)據(jù),x 坐標(biāo)(時間)的范圍是從 14:10:50 到 18:10:40。
y 坐標(biāo)(第 2 列和第 3 列)的范圍是從 14 到 50。
可以根據(jù)這些信息指定自己的范圍。下面的示例使用的 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.conf set terminal png xC9C9C9 set output "sarimage.png" set autoscale set xdata time set 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 grid set style data lines plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"圖 2. sarimage2
回頁首
gnuplot 和柱狀圖
還可以使用柱狀圖或框圖表示數(shù)據(jù),有時候這比使用靜態(tài)數(shù)據(jù)更合適。清單 4 是從一臺 AIX 機(jī)器獲得的用戶組用戶總數(shù)。第 1 列包含 AIX 組名,第 2 列包含成員總數(shù)。
清單 4. grpdata.txt
staff 54 apps 22 sybgrp 12 db2grp1 29 dasdm 8 dstage 21 dsgrp 8 batch 28 db2prd 1要想使用柱狀圖,只需告訴 gnuplot 應(yīng)該使用柱狀圖生成圖形:
set style data histograms默認(rèn)生成的柱狀圖的框沒有粗線邊框,框中也沒有填充顏色。但是,如果指定邊框,在框的底邊沿著 x 軸可能有兩條粗線(這看起來不太美觀)。
gnuplot 按以下次序繪制框的邊框:頂、底、左和右,值分別為 1、2、4、8。要想刪除一條或多條邊框線,只需提供相應(yīng)值的和。在這個示例中,使用 -1 選項刪除底部邊框線。指定 fill 選項就會用默認(rèn)顏色填充框:
set style fill solid 1.00 border -1對 于 x 坐標(biāo),這里不使用時間,而是使用組名稱。使用 xtic 選項讓 gnuplot 沿著 x 軸放置 tic 和數(shù)據(jù)標(biāo)簽(第 1 列)。在這里就是組名稱。但是,有時候標(biāo)簽包含許多字符,或者 xtic 的時間格式在圖形上的 tic 之間放不下。這時就會看到標(biāo)簽相互重疊。為了避免這個問題,把標(biāo)簽旋轉(zhuǎn) 90 度(通過試驗找到合適的角度),讓它們垂直顯示。可以使用以下命令來實(shí)現(xiàn)這種效果:
set xtic rotate by 90第 2 列中的數(shù)據(jù)使用第 1 列(x 數(shù)據(jù))作為參照:
2:xtic (1)在生成圖形時,給數(shù)據(jù)加上標(biāo)題 “apps groups numbers”:
plot "grpdata.txt" using 2:xtic(1) title "apps group numbers"使用以下命令生成圖像 grpimage.png:
$ cat grphist.conf | gnuplot清單 5 包含生成圖像的 gnuplot 命令,輸出見 圖 3。
清單 5. grphist.conf
# grphist.conf set terminal png truecolor set output "grpimage.png" set grid set xtic rotate by 90 set style data histograms set style fill solid 1.00 border -1 plot "grpdata.txt" using 2:xtic(1) title "apps group numbers"圖 3. grpimage
當(dāng)然,可以像 sar 示例一樣在柱狀圖中繪制多組數(shù)據(jù)。現(xiàn)在看看另一個數(shù)據(jù)源。清單 6 中的數(shù)據(jù)反映三個月內(nèi)磁盤陣列中數(shù)據(jù)的增減。第 1 列是磁盤陣列名稱,第 2 列是第一個月的磁盤使用量,第 3 列是下一個月的磁盤使用量,最后一個月的數(shù)據(jù)在第 4 列中。
清單 6. disk.txt
hdisk2 420 425 410 hdisk3 700 780 760 hdisk4 450 450 452 hdisk5 680 702 690 hdisk6 320 330 329 hdisk7 530 515 514生成圖形的配置文件見 清單 7。在 plot 命令中,同樣使用 xtic 命令修改 x 軸數(shù)據(jù)的顯示方式。在生成柱狀圖時,第 2、3 和 4 列使用 x 軸作為參照點(diǎn)。因此指定第 2 列使用 x 軸作為參照:
2:xtic(1)gnuplot 假設(shè)要繪制的其他列也參照 x 軸,所以在 plot 命令中不需要再指定 xtic:
plot "disk.txt" using 2:xtic(1) title "Oct-09 data growth(gb)", '' using 3 title "N ov-09 data growth(gb)", '' using 4 title "Dec-09 data growth(gb)"使用以下命令生成圖像:
$ cat diskhist.conf | gnuplot產(chǎn)生的圖像見 圖 4。
清單 7. diskhist.conf
# diskhist.conf set terminal png truecolor set output "diskimage.png" set grid set style data histograms set style fill solid 1.00 border -1 plot "disk.txt" using 2:xtic(1) title "Oct-09 data growth(gb)", '' using 3 title "N ov-09 data growth(gb)", '' using 4 title "Dec-09 data growth(gb)"圖 4. diskimage
回頁首
結(jié)束語
可 以使用 gnuplot 從各種數(shù)據(jù)生成不同的圖形。要想使用 shell 腳本自動執(zhí)行圖形生成,我建議使用 'here' 文檔方法,可以通過這個過程使用 gnuplot 動態(tài)地生成圖形。要想禁止 Web 服務(wù)器緩存圖形,應(yīng)該在腳本中使用適當(dāng)?shù)?HTML META 標(biāo)記(例如 ‘no-cache’ 語句)。
轉(zhuǎn)載于:https://www.cnblogs.com/helloWaston/p/4539202.html
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的【转载】使用 gnuplot 在网页中显示数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java获取URL参数(get方式,并且
- 下一篇: netty 粘包的解决策略