文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在网页中用GNUPlot生成图表

在网页中用GNUPlot生成图表

时间:2006-03-27  来源:sleep_meng


               
               
               
               
               
作者:RZ.Meng
引言:随着计算机技术的飞速发展,计算机在各领域中的应用越来越普及,利用计算机实现实时的数据分析和作图显得越来越重要。要对数据进行分析和管理,特别是对大量的数据进行更新,修改,添加等。在科学研究方面,每天都会产生大量的数据,怎样对这些数据进行存储和分析是一件困难的事情。那么怎样使数据的分析简单一点呢?那就是使用数据库系统。

摘要:xxxxx中子监测器每天都会产生大量的数据。使用数据库系统,对这些数据进行存储。以C语言实现对数据的实时入库,且用GNUplot实现数据的图形分析和WEB发布是本文主要内容。

关键字:MySQL  GNUplot
C语言  Linux

3.1 系统功能描述
中子监测器每一秒钟就会产生一组数据,数据通过网络传输到各个地方,当接收到数据时,就要对数据进行存储,就是数据库的入库操作。数据不光要存储,还要对数据进行分析,即根据数据作出数据变化的曲线图形,而且要求能够按不同时间范围和时间间隔作图。还有web发布,这个就是把作出的图形通过WEB服务器向外发布即可。
系统一秒钟就有一组数据,每一组数据的格式如下:
______________________________________________________________
| 日期和时间
| 修正过的数据 | 没修正过的数据 | 时间间隔 | 大气压
|
-----------------------------------------------------------------

3.2 系统功能设计
3.2.1 数据库设计
系统使用MySQL数据库,MySQL数据库在科学和教育领域使用是免费的,这样我们不须要像其它数据库那样向数据库开发商支付使用允可费。而且MySQL本身是用C/C++编写,它提供完善的C语言接口,使我们入库程序的编写更加方便。根据数据的格式,只要设计一张数据表就行,数据表格式如下:
    上面是数据表的E-R图,进行数据查询时,我们主要查询的是“修正过的数据”和“没修正过的数据”这两个字段,且以“日期和时间”和“时间间隔”两个字段为条件,为了使查询速度更优化,必须对表中的“日期和时间”和“时间间隔”两个字段建立索引。下面是用SQL语句写的建表语句:
--
-- Host: localhost    Database: nmdb
--
------------------------------------------------------
-- Server version 4.1.7
--
-- Table structure for table `nmt`
--
DROP TABLE IF EXISTS `nmt`;
CREATE TABLE `nmt` (
  `pk`
bigint(20) unsigned NOT NULL auto_increment,
  `nm_t`
bigint(14) unsigned NOT NULL default '0',
  `nm_on`
float(16,2) unsigned NOT NULL default '0.00',
  `nm_off`
bigint(14) unsigned NOT NULL default '0',
  `nm_gap`
int(10) unsigned NOT NULL default '0',
  `nm_pa`
float(6,2) NOT NULL default '0.00',
  PRIMARY
KEY  (`pk`),
  KEY
`nm_ymd_idx` (`nm_t`),
  KEY
`nm_gap_idx` (`nm_gap`)
);


3.2.2  入库程序的设计与实现
数据库表建立好后,必须要对数据进行实时写入,虽然每一秒钟有一组数据产生,但并不是一秒钟对数据库进行一次写入操作。数据库的写入操作是以天为单位,每天进行一次写入操作。写入操作是一条条地写入,即一组数据一组数据的写入。写入过程为:

   i.  使用用户名,用户密码,数据库名称,数据库表名称等连接数据库。
   ii. 使用insert语句对数据进行写入操作。
   iii.关闭数据库连接。

MySQL提供完善的C语言接口,利用它提供的接口函数可以很方便地完成对数据库的连接,写入,关闭等操作。使程序开发方便,快速,容易维护。
我们把用户名,密码,数据库名称,数据表名称等有时须要改变的变量放到头文件中,如果这些变量改变时,只要重新编译程序就可使用。把对数据库的连接,写入操作,关闭等不变的部分放到C文件中。

下面是用C语言写的数据库接口程序:

/**
* file       nmdb.h
*
created    2005-05-19
* code
by    Meng Renzhou
*/


/* change this for your database */
#define host_name  
"localhost"     /* host
to connect to (default = localhost) */
#define user_name  
"root"          /* user
name (default = your login name) */
#define password   
"nmdbpass"      /*
password (default = none) */
#define db_name   
"nmdb"          /*
database to use (default = none) */
#define table_name
"nmt"           /*
database table to use */

/**
* file       nmdb.c
*
created    2005-05-19
* code
by    Meng Renzhou
*/

/**
*
modify    2005-06-05
* modify by
Meng Renzhou
*/
#include
#include
#include "nmdb.h"

MYSQL *conn = NULL;

int connectdb(void){
    conn =
mysql_init (NULL);
    if (conn
== NULL){
      
fprintf (stderr, "mysql_init() failed (probably out of
memory)\n");
        exit
(0);
    }
    if
(mysql_real_connect (
      
conn,
      
host_name,
      
user_name,
      
password,
      
db_name,
        0,
      
NULL,
        0)
        ==
NULL)
    {
      
fprintf (stderr, "mysql_real_connect() failed:\nError %u
(%s)\n",
               
mysql_errno (conn), mysql_error (conn));
        exit
(0);
    }
   
return(0);
}

int savetodb(char *query){
    int rows
= 0;
    if (
mysql_query(conn,query) != 0){
      
fprintf(stderr,"mysql_query() failed: %s\n",query);
    }
    rows =
mysql_affected_rows(conn);
    if (rows
!=1 ){
      
fprintf(stderr,"Invalid affected rows by MySQL\n");
    }
    return(0);
}

void closedb(void){
   if(conn
!= NULL) mysql_close(conn);
}


3.3 数据的作图分析及WEB发布
3.3.1 从数据库中提取数据并作图
要用数据作图,首先要把数据从数据库中导出,即是对数据库的查询。数据的查询是以“日期和时间”和“时间间隔”两个字段为条件的,即要查出不同时间范围不同时间间隔的数据。
数据的查询使用SQL语言的select语句来实现。如下:
SELECT nm_t,$4 FROM $tablename WHERE nm_gap=$1 AND
nm_t>=$2 AND nm_t其中的$1,$2,$3,$4是可变的查询条件,$4代表要查询的是修正过的或没有修正过的数据,$1为时间间隔,$2和$3为日期和时间范围。
然后根据查出的数据使用GNUplot作图,GNUplot是一个专为各种图表的制作而设计的软件,在数学等方面的使用很广泛,它的使用方法这里不作介绍,如要了解,可以到网上查询。为了方便,可以使用bash(Linux中的shell)脚本来完成数据的查询和作图,使数据的查询和作图变得轻松。下面是bash脚本:

#!/bin/bash
# file: plot
# write by Meng Renzhou
tablename=nmt
dbname=nmdb
dbuser=user
dbpass=pass

echo "SELECT nm_t,$4 FROM $tablename WHERE \
     
nm_gap=$1 AND nm_t>=$2 AND nm_t      |
mysql $dbname --user=$dbuser --pass=$dbpass --silent \
      >
/tmp/plot.dat

gnuplot
set terminal png color
set xdata time
set timefmt "%Y%m%d%H%M%S"
set format x "%Y\n%m/%d\n%H:%M"
set size 1.4,0.7
set title "Cosmic rays variations"
set nokey
set grid
plot "/tmp/plot.dat" using 1:2 with
lines
ENDOFINPUT

3.3.2 数据的WEB发布
图形的WEB发布就是把GNUplot生成的图形在WEB上发布,通过PHP语
言再结合上一节的bash脚本,很容易通过网页形式实时地显示GNUplot 生成的
图像。图2.2是用GNUplot生成的图形示例。PHP程序如下:
2.4 小结
本设计是多种技术的组合和应用,必须对Linux系统环境及其环境下的多种
编程语言有一定的了解和使用经验才可以完成。
参考资料:
MySQL™    MySQL-manual    www.mysql.com
               
               
               
               
               
               
               
               
               
               
               
               
               

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载