ชาวเราเหล่าคนทำเว็บโปรแกรมมิ่ง เมื่อทำโปรแกรมออกมาสักตัวหนึ่ง สิ่งที่มักจะหลีกหนีไม่พ้นก็คือการแสดงกราฟ

pChart เป็นคลาส PHP ที่ใช้สำหรับสร้างกราฟโดยเฉพาะ จุดเด่นที่เห็นได้ชัดก็คือใช้ง่าย และผลลัพธ์ออกมาสวยงาม

คลาสตัวนี้ผมรู้จักมาจากคุณ 7 ซึ่งก็คงต้องขอขอบคุณไว้ ณ ตรงนี้ด้วย ผมคิดอยู่หลายวันว่าจะเขียนบทความเรื่องนี้อย่างไรดี ให้ท่านอ่านรู้เรื่องได้ไม่ยากนัก คิดไปคิดมาตกลงในใจว่าจะแสดงโค้ดสำหรับสร้างกราฟสำเร็จรูปขึ้นมาเลย ท่านจะได้ก้อปแล้วใช้งานได้เลย หลังจากนั้นจึงอธิบายโค้ด ในจุดที่จำเป็นต้องรู้ เผื่อการแก้ไขให้ตรงกับความต้องการ

แจ้งกรอบการนำเสนอไว้ จะได้ทำใจให้เป็นไปในแนวทางเดียวกัน ตั้งแต่เริ่มต้น ผลลัพธ์ของโค้ดที่นำมาเสนอจะเป็นดังภาพด้านล่าง

pchart-01

1. ดาวนโหลดคลาส pChart

เวอร์ชั่นที่ใช้คือ pChart 1.27 – beta ดาวน์โหลดที่นี่

2. เขียนโค้ด

<?php
  // Standard inclusions      
  include("pChart/pData.class");   
  include("pChart/pChart.class");   
 
  // Dataset definition    
  $DataSet = new pData;   
  $DataSet->AddPoint(array(1079,1151,1185,1226,1121,738,710),"Visitor");
  $DataSet->AddPoint(array("1 พ.ย.","2 พ.ย.","3 พ.ย.","4 พ.ย.","5 พ.ย.","6 พ.ย.","7 พ.ย."),"Day");
  $DataSet->AddSerie("Visitor");   
  $DataSet->SetAbsciseLabelSerie("Day");   
  $DataSet->SetYAxisName("Visitors");
  $DataSet->SetYAxisUnit("ip");
 
  // Initialise the graph   
  $Graph = new pChart(700,230);   
  $Graph->setFontProperties("Fonts/tahoma.ttf",8);   
  $Graph->setGraphArea(70,30,680,200);   
  $Graph->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240);   
  $Graph->drawRoundedRectangle(5,5,695,225,5,230,230,230);   
  $Graph->drawGraphArea(255,255,255,TRUE);
  $Graph->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2);   
  $Graph->drawGrid(4,TRUE,230,230,230,50);
 
  // Draw the 0 line   
  $Graph->setFontProperties("Fonts/tahoma.ttf",6);   
  $Graph->drawTreshold(0,143,55,72,TRUE,TRUE);   
 
  // Draw the line graph
  $Graph->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());   
  $Graph->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255);   
 
  // Finish the graph   
  $Graph->setFontProperties("Fonts/tahoma.ttf",8);   
  $Graph->drawLegend(75,35,$DataSet->GetDataDescription(),255,255,255);   
  $Graph->setFontProperties("Fonts/tahoma.ttf",10);   
  $Graph->drawTitle(60,22,"Google Analytics",50,50,50,585);   
  $Graph->Stroke("example1.png");      
 ?>

คำอธิบาย

  include("pChart/pData.class");   
  include("pChart/pChart.class");

อินคลูดคลาส pchart เข้ามาใช้งานในโปรเจ็กเรา

  $DataSet = new pData;   
  $DataSet->AddPoint(array(1079,1151,1185,1226,1121,738,710),"Visitor");
  $DataSet->AddPoint(array("1 พ.ย.","2 พ.ย.","3 พ.ย.","4 พ.ย.","5 พ.ย.","6 พ.ย.","7 พ.ย."),"Day");

กำหนดข้อมูลที่ต้องการนำไปสร้างเป็นกราฟ ให้ชื่อ Visitor กับ Day
Visitor เก็บจำนวนคนเข้าเว็บตั้งแต่วันที่ 1 พ.ย. – 7 พ.ย.
Day เป็นตัวบอกว่าข้อมูล Visitor นั้นเป็นของวันใด และ Day นี้จะนำไปทำเป็นลาเบล เส้นแกน X
สังเกตุให้ดีขนาด array Visitor และ Day เท่ากัน 1079 เป็นของ 1 พ.ย. , 1151 เป็นของ 2 พ.ย.

  $DataSet->AddSerie("Visitor");

บอกคลาส pchart ว่า Visitor นั้นเราต้องการเอาไปแสดงเป็นเส้นกราฟ

  $DataSet->SetYAxisName("Visitors");
  $DataSet->SetYAxisUnit("ip");

พิมพ์คำว่า Visitors ip ออกมาในแกน Y เพื่อแสดงให้รู้ว่า ตัวเลขในแกน Y นั้นหมายถึงอะไร

  $Graph = new pChart(700,230);

สร้างกราฟขนาด 700*230 px

  $Graph->setFontProperties("Fonts/tahoma.ttf",8);   
  $Graph->setGraphArea(70,30,680,200);

ใช้ฟอนต์ tahoma ขนาด 8 พ้อย พิมพ์ตัวหนังสือต่างๆในกราฟ และ
กำหนดเนื้อกราฟ กั้นซ้าย 70 กั้นบน 30 ยาวไปสิ้นสุดที่จุด 680 และสูงสิ้นสุดที่จุด 200

กราฟนั้นมันจะประกอบไปด้วย พื้นที่ๆใช้สำหรับพิมพ์ลาเบลต่างๆ และพื้นที่ๆสำหรับพิมพ์เส้นกราฟ
ถ้าเรากำหนด เนื้อกราฟเป็น 0 ,0,700,230 ขนาดเท่ากับที่เรากำหนดในคำสั่ง pChart(700,230) พอดีเป๊ะ
ผลลัพธ์ที่ออกมาก็จะมีแต่เส้นกราฟ รายละเอียดไม่มีที่เหลือให้แสดง

  $Graph->setFontProperties("Fonts/tahoma.ttf",6);   
  $Graph->drawTreshold(0,143,55,72,TRUE,TRUE);

กำหนดตำแหน่งเส้นเป้าหมาย การแสดงผลจะเป็นเส้นประขึ้นมาในกราฟ
ถ้าสมมติว่าผมกำหนดไว้ในแต่ละเดือนว่าคนที่เข้าเว็บอย่างต่ำจะต้อง 400 เวลาทำกราฟเพื่อแสดงในที่ประชุมผมก็กำหนด
$Graph->drawTreshold( 400 ,143,55,72,TRUE,TRUE);
รู้แค่ตัวเลขตัวแรกก็พอนะครับ ตัวอื่นไม่ต้องสนใจว่ามีความหมายอะไร ก้อปแล้วใช้ได้เลย

  $Graph->drawTitle(60,22,"Google Analytics",50,50,50,585);

พิมพ์หัวกราฟเป็นคำว่า Google Analytics จะได้รู้ว่าเรากำลังแสดงอะไรกัน

  $Graph->Stroke("example1.png");

หลังจากกำหนดรายละเอียดทั้งหมดมาแล้วก็ถึงเวลา พลอตกราฟให้ออกมาทางเบราเซอร์
ในกรณีที่ท่านต้องการให้สร้างเป็นไฟล์ภาพกราฟไว้บนเซิฟเวอร์ ให้ใช้คำสั่ง
$Graph->Render(“example1.png”);
แทน เสร็จแล้วจะนำไปแนบอีเมล์ หรือทำอะไรต่อ ก็สุดแต่ท่านจะจินตนาการ เอาละครับ

ตัวอย่างกราฟ 2 เส้น

เปลี่ยนแปลงแค่นิดหน่อยเอง

  $DataSet->AddPoint(array(1079,1151,1185,1226,1121,738,710),"Visitor");
  $DataSet->AddPoint(array(1000,800,950,623,540,675,451),"Returner");
  $DataSet->AddPoint(array("1 พ.ย.","2 พ.ย.","3 พ.ย.","4 พ.ย.","5 พ.ย.","6 พ.ย.","7 พ.ย."),"Day");
  $DataSet->AddSerie("Visitor");   
  $DataSet->AddSerie("Returner");

โค้ดกราฟ 2 เส้น

<?php
  // Standard inclusions      
  include("pChart/pData.class");   
  include("pChart/pChart.class");   
 
  // Dataset definition    
  $DataSet = new pData;   
  $DataSet->AddPoint(array(1079,1151,1185,1226,1121,738,710),"Visitor");
  $DataSet->AddPoint(array(1000,800,950,623,540,675,451),"Returner");
  $DataSet->AddPoint(array("1 พ.ย.","2 พ.ย.","3 พ.ย.","4 พ.ย.","5 พ.ย.","6 พ.ย.","7 พ.ย."),"Day");
  $DataSet->AddSerie("Visitor");   
  $DataSet->AddSerie("Returner");   
  $DataSet->SetAbsciseLabelSerie("Day");   
  $DataSet->SetYAxisName("Visitors");
  $DataSet->SetYAxisUnit("ip");
 
  // Initialise the graph   
  $Graph = new pChart(700,230);   
  $Graph->setFontProperties("Fonts/tahoma.ttf",8);   
  $Graph->setGraphArea(70,30,680,200);   
  $Graph->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240);   
  $Graph->drawRoundedRectangle(5,5,695,225,5,230,230,230);   
  $Graph->drawGraphArea(255,255,255,TRUE);
  $Graph->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2);   
  $Graph->drawGrid(4,TRUE,230,230,230,50);
 
  // Draw the 0 line   
  $Graph->setFontProperties("Fonts/tahoma.ttf",6);   
  $Graph->drawTreshold(0,143,55,72,TRUE,TRUE);   
 
  // Draw the line graph
  $Graph->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());   
  $Graph->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255);   
 
  // Finish the graph   
  $Graph->setFontProperties("Fonts/tahoma.ttf",8);   
  $Graph->drawLegend(75,35,$DataSet->GetDataDescription(),255,255,255);   
  $Graph->setFontProperties("Fonts/tahoma.ttf",10);   
  $Graph->drawTitle(60,22,"Google Analytics",50,50,50,585);   
  $Graph->Stroke("example1.png");      
 ?>

pchart-02