歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 圖形繪制利器:Gnuplot

圖形繪制利器:Gnuplot

日期:2017/2/28 14:25:29   编辑:Linux教程

Gnuplot簡介

Gnuplot是一款非常強大的跨平台作圖工具。小到畫各種數學函數圖,大到寫作科技論文、實現各種復雜的數據公式,它都能輕松應對。秉承UNIX的優良傳統,gnuplot使用純文本作為輸入,因其包含的大量命令和變量,使得其有著無與倫比的表現力。下面的兩個圖形,就是gnuplot的傑作:

對gnuplot 作圖有興趣的同學,可以參考其官網的手冊,其中有大量的范例。

時序圖的繪制—使用Gnuplot http://www.linuxidc.com/Linux/2014-08/104930.htm

Tpcc-MySQL測試並使用Gnuplot生成圖表 http://www.linuxidc.com/Linux/2014-03/98566.htm

RH442攻略之Gnuplot http://www.linuxidc.com/Linux/2014-03/98405.htm

Ubuntu下應用Gnuplot進行數據的可視化 http://www.linuxidc.com/Linux/2011-12/50358.htm

利用oprofile分析fortran並用Gnuplot畫圖的shell腳本 http://www.linuxidc.com/Linux/2011-04/34497.htm

Ubuntu下安裝Gnuplot 4.6.0 http://www.linuxidc.com/Linux/2014-09/106297.htm

插入一點業務背景

我前面有篇文章介紹了一鍵搭建blackhole從庫的工具,其中提到,blackhole從庫的一個用途是作為某種分析程序的數據源。實際上,微博相關的幾個關鍵數據指標,包括用戶、關注、博文、轉發、評論、私信等,都搭建了對應的blackhole從庫,我們的分析程序會定期解析binlog,來分析用戶在某個時段的活躍程度。為了得到近乎適時的統計數據,我采用crontab每隔5分鐘在blackhole從庫上執行一次flush logs,緊接著分析被切割的日志。這樣就可以立即得到粒度為5分鐘的用戶活躍統計數據,再保存到數據庫中,用各種方法展現,環比、同比、平均值等,都可以很容易的獲得。

利用gnuplot作圖

有了數據之後,采用rrdtool、excel、google API等都可以作圖。我的需求是,每天上午10點,定時郵件發送前一天的統計數據,並附上直觀的圖形說明。最終,我選擇采用gnuplot來作圖。 附數據如下(數據非真實數據。一共是7列,其中日期和時間整體作為一列,別混淆):

2012-10-13 03:45:16 1893 61564 28476 37180 265190 8794
2012-10-13 03:50:16 1823 60016 27296 38648 276206 8753
2012-10-13 03:55:15 1606 58628 26688 32292 262998 8377
2012-10-13 04:00:15 1539 57988 25628 36472 249984 8079
2012-10-13 04:05:14 1641 58552 25432 35064 233832 7493
2012-10-13 04:10:16 1731 59808 25108 36348 235218 6909
2012-10-13 04:15:15 1720 56444 24124 38072 228382 6892
2012-10-13 04:20:15 1680 53952 23088 38480 233300 6742
2012-10-13 04:25:14 1582 53600 22420 37072 232974 6477
2012-10-13 04:30:16 1531 53560 22612 37896 229090 6168

作圖的腳本如下:


#!/usr/bin/gnuplot
set terminal png #輸出格式為png文件
set output "image_output_file.png" #指定數據文件名稱
set title "KPI"
set ylabel 'net added count'
set yrange [0:700000] #設置Y軸的范圍

set key right top height 3 spacing 2 #設置圖例
set border 3 lt 3 lw 2 #這會讓你的坐標圖的border更好看
set grid #顯示網格
set key box #它把圖例用一個box裝起來
set xtics nomirror rotate #只需要一個x軸
set ytics mirror #只需要一個y軸
set mytics 5 #可以增加分刻度
set mxtics 1

set pointsize 0.4 #點的像素大小
set datafile separator '\t' #數據文件的字段用\t分開

#注意表的數據導出的時候默認是按照tab來分隔的
set xdata time #x軸代表時間
set timefmt "%Y-%m-%d %H:%M:%S" #數據文件中時間的格式
set format x " %Y-%m-%d %H:%M" #x坐標軸顯示的數據

#設置圖像的大小 為標准大小的2倍
set size 2.3,2
plot 'unit_data.txt' using 1:2 w lp lt 1 lw 2 title "第二列", 'unit_data.txt' using 1:3 w lp lt 2 lw 2 pt 7 title "第三列", 'unit_data.txt' using 1:4 w lp lt 3 lw 2 title "第四列", 'unit_data.txt' using 1:5 w lp lt 4 lw 2 title "第五列", 'unit_data.txt' using 1:6 w lp lt 5 lw 2 title "第六列", 'unit_data.txt' using 1:7 w lp lt 6 lw 2 title "第七列"

執行腳本,腳本會讀取unit_data.txt中的數據,以第一列(日期和時間)作為x軸,第2到7列作為y軸顯示出6條不同的曲線,如下圖:

Copyright © Linux教程網 All Rights Reserved