 |
ปัญหาการทำกราฟด้วย chartdirector ครับ งง??? ใครช่วยที |
|
 |
|
|
 |
 |
|
ขอดูโค้ดหน่อยครับ...
|
 |
 |
 |
 |
Date :
2011-02-22 09:16:38 |
By :
Nautilus |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
source code เป็นดังนี้ครับ
แบ่งเป็น 2 ส่วน ส่วนบนเป็นการ Query จาก oracle (ซึ่งมีการใช้ทั้ง session และ PHP_SELF)
และส่วนล่างคือส่วนที่เอา code ของ chartdirector มาใช้
แต่สงสัยอย่างนึงว่า ถ้าเอาเฉพาะส่วนล่างโดยกำหนดค่าไปตรง ๆ มันแสดงได้
แต่พอดึงจากฐานข้อมูลกับไม่ยอมแสดงซะงั้นกลายเป็นตัวยึกยือ
// 1 Query from database to arry **************************
while(odbc_fetch_row($result))
{
echo"<tr><td style='height:15px; width:70px; background-color:#DDDDDD'><font size=2>";
echo substr(odbc_result($result, 1),0,10);
$labels[]=substr(odbc_result($result, 1),0,10);
echo"</font></td><td style='height:15px; width:85px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 2));
$data0[]=number_format(odbc_result($result, 2));
echo"</font></td><td style='height:15px; width:70px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 3));
$data1[]=number_format(odbc_result($result, 3));
echo"</font></td><td style='height:15px; width:70px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 4));
$data2[]=number_format(odbc_result($result, 4));
echo"</font></td><td style='height:15px; width:65px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 5));
$data3[]=number_format(odbc_result($result, 5));
echo"</font></td><td style='height:15px; width:65px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 6));
$data4[]=number_format(odbc_result($result, 6));
echo"</font></td><td style='height:15px; width:65px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 7));
$data5[]=number_format(odbc_result($result, 7));
echo"</font></td><td style='height:15px; width:65px; background-color:#DDDDDD'><font size=2>";
echo number_format(odbc_result($result, 5)-odbc_result($result, 6));
$data6[]=number_format(odbc_result($result, 5)-odbc_result($result, 6));
}
// 2 add graph **************************
$c = new XYChart(800, 575);
# Add a title to the chart using 18 pts Times Bold Italic font
$c->addTitle("Inventory Curve Flow", "timesbi.ttf", 18);
# Set the plotarea at (50, 55) and of 500 x 280 pixels in size. Use a vertical
# gradient color from light blue (f9f9ff) to sky blue (aaccff) as background. Set
# border to transparent and grid lines to white (ffffff).
$c->setPlotArea(50, 55, 500, 280, $c->linearGradientColor(0, 55, 0, 335, 0xf9fcff,
0xaaccff), -1, Transparent, 0xffffff);
# Add a legend box at (50, 28) using horizontal layout. Use 10pts Arial Bold as font,
# with transparent background.
$legendObj = $c->addLegend(50, 28, false, "arialbd.ttf", 10);
$legendObj->setBackground(Transparent);
# Set the x axis labels
$c->xAxis->setLabels($labels);
# Set y-axis tick density to 30 pixels. ChartDirector auto-scaling will use this as
# the guideline when putting ticks on the y-axis.
$c->yAxis->setTickDensity(30);
# Set axis label style to 8pts Arial Bold
$c->xAxis->setLabelStyle("arialbd.ttf", 8);
$c->yAxis->setLabelStyle("arialbd.ttf", 8);
# Set axis line width to 2 pixels
$c->xAxis->setWidth(2);
$c->yAxis->setWidth(2);
# Add axis title using 10pts Arial Bold Italic font
$c->yAxis->setTitle("Revenue in USD millions", "arialbi.ttf", 10);
# Add a line layer to the chart
$layer = $c->addLineLayer2();
# Set the line width to 3 pixels
$layer->setLineWidth(3);
# Add the three data sets to the line layer, using circles, diamands and X shapes as
# symbols
$dataSetObj = $layer->addDataSet($data0, 0xff0000, "Plan start");
$dataSetObj->setDataSymbol(CircleSymbol, 9);
$dataSetObj = $layer->addDataSet($data1, 0x00ff00, "Plan finish");
$dataSetObj->setDataSymbol(DiamondSymbol, 11);
$dataSetObj = $layer->addDataSet($data2, 0xff6600, "Plan ship");
$dataSetObj->setDataSymbol(Cross2Shape(), 11);
$dataSetObj = $layer->addDataSet($data3, 0x1a660F, "Start");
$dataSetObj->setDataSymbol(Cross2Shape(), 11);
$dataSetObj = $layer->addDataSet($data4, 0x1a66FF, "Oorec");
$dataSetObj->setDataSymbol(Cross2Shape(), 11);
$dataSetObj = $layer->addDataSet($data5, 0xff00FF, "Oeship");
$dataSetObj->setDataSymbol(CircleSymbol, 9);
$dataSetObj = $layer->addDataSet($data6, 0xFFff00, "Wip");
$dataSetObj->setDataSymbol(DiamondSymbol, 11);
# Output the chart
header("Content - type : Image:/PNG");
print($c->makeChart2(PNG));
|
 |
 |
 |
 |
Date :
2011-02-22 10:07:57 |
By :
tueng_p |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เป็นเพราะว่า โค้ดในส่วนของ graph มันจะ พ่น output ออกมาเป็นรูปภาพครับ ถ้าเรารันเฉพาะโค้ดส่วนนั้นมันก็จะแสดงเป็นรูปออกมา มั้ง อิ อิ
แต่ว่าวิธีแก้ปัญหาคือ iframe แสดงรูปเอาครับ หรือไม่ก็เรียกโดยใช้ img tag แต่ผมไม่แน่ใจว่าทำได้หรือเปล่านะ img tag อะ เคยใช้นานมากแล้ว เคยใช้แต่ แสดงผ่าน iframe เอาครับ
สรุปก็คือ ห้ามส่ง output อย่างอื่นภายในหน้าที่จะแสดงรูป
|
 |
 |
 |
 |
Date :
2011-02-22 20:30:12 |
By :
Nautilus |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|