JpGraph 是 PHP 強大的圖表庫,本文示範長條圖完整實作,重點解決中文顯示亂碼問題,並說明關鍵設定參數。
<?php
require_once 'jpgraph-3.0.7/jpgraph/jpgraph.php';
require_once 'jpgraph-3.0.7/jpgraph/jpgraph_bar.php';
// 模擬資料
$userNames = ['張三', '李四', '王五', '趙六', '錢七'];
$userOrders = [120, 85, 200, 60, 150];
// 建立圖表畫布 (寬800, 高600)
$graph = new Graph(800, 600);
$graph->SetScale('textlin'); // X軸文字, Y軸線性
// X軸標籤設定
$graph->xaxis->SetTickLabels($userNames);
$graph->xaxis->SetFont(FF_SIMSUN, FS_NORMAL, 12); // 關鍵:指定中文字型
$graph->xaxis->SetLabelAngle(45); // 標籤傾斜45度避免重疊
// Y軸留白
$graph->yaxis->scale->SetGrace(20);
$graph->xaxis->scale->SetGrace(20);
// 陰影與邊距
$graph->SetShadow();
$graph->img->SetMargin(60, 40, 40, 80); // 左、右、上、下
// 建立長條圖
$barPlot = new BarPlot($userOrders);
$barPlot->SetFillColor('#FF8C00'); // 橙色
$barPlot->value->Show(); // 顯示數值
$barPlot->value->SetFont(FF_ARIAL, FS_BOLD, 10);
$barPlot->value->SetAngle(45);
$barPlot->value->SetFormat('%d');
$graph->Add($barPlot);
// 標題與軸標籤(關鍵:使用 FF_SIMSUN 支援中文)
$graph->title->Set('用戶訂單統計圖');
$graph->title->SetFont(FF_SIMSUN, FS_BOLD, 16);
$graph->xaxis->title->Set('用戶姓名');
$graph->xaxis->title->SetFont(FF_SIMSUN, FS_BOLD, 12);
$graph->yaxis->title->Set('訂單數量');
$graph->yaxis->title->SetFont(FF_SIMSUN, FS_BOLD, 12);
// 輸出圖片
$graph->Stroke();
?>
| 問題 | 解決方法 |
|---|---|
| 標題/軸標籤亂碼 | 使用 FF_SIMSUN 字型常數(需 JpGraph 3.0+ 內建) |
| X軸刻度標籤亂碼 | $graph->xaxis->SetFont(FF_SIMSUN, FS_NORMAL, 12) |
| 數值標籤亂碼 | $barPlot->value->SetFont(FF_SIMSUN, FS_NORMAL, 10) |
| PHP 檔案編碼 | 確保檔案儲存為 UTF-8 無 BOM |
FF_SIMSUN:SimSun(新細明體/宋體),內建支援中文FF_VERDANA、FF_ARIAL:僅支援拉丁字元FS_NORMAL、FS_BOLD、FS_ITALIC:字體樣式$barPlot->SetFillGradient('#FF8C00', '#FFD700', GRAD_HOR)$barPlot->SetLegend(['2024年訂單']) + $graph->legend->SetFont(FF_SIMSUN, FS_NORMAL, 10)$graph->ygrid->Show(true) / $graph->xgrid->Show(false)$graph->Stroke('chart.png') 存檔而非直接輸出php_gd2.dll 擴展已啟用$graph->Stroke('cache/chart_'.md5($data).'.png') 快取圖片