使用pChart绘制风向图时Y轴无法限制在0-360范围的技术问题
pChart风向图表Y轴范围无法限制在0-360的问题解决
问题描述
使用pChart开发气象站风向图表时,尝试通过手动设置Y轴范围为0-360,以便添加0°、90°、180°、270°等方位标识线,但图表Y轴始终显示为0-400。测试数据均在0-360区间内,调整Max值为359/360、配置MinDivHeight、Factors等参数均无效,但百分比数据设置0-100范围可正常生效。
测试代码
<?php include("pchart/class/pData.class.php"); include("pchart/class/pDraw.class.php"); include("pchart/class/pImage.class.php"); $points = array(0, 10, 90, 270, 345, 355); $scale = array( 'Mode' => SCALE_MODE_MANUAL, 'ManualScale' => array(0=>array("Min"=>0,"Max"=>360)), ); $data = new pData(); $data->addPoints($points, "dir"); $picture = new pImage(256, 128, $data, TRUE); $picture->setFontProperties(array("FontName" => "pchart/fonts/GeosansLight.ttf","FontSize"=>10)); $picture->setGraphArea(40,10,216,108); $picture->drawScale($scale); $picture->drawPlotChart(array("PlotSize"=>1,"PlotBorder"=>TRUE,"BorderSize"=>1)); $picture->Render("wind.png"); echo "<img src='wind.png'>"; ?>
问题原因
pChart的SCALE_MODE_MANUAL模式下,Y轴范围会自动根据刻度因子调整,确保所有刻度值是因子的整数倍。默认Y轴刻度因子为50,360不是50的整数倍,因此会自动向上取整到最近的因子倍数(50×8=400)。而百分比数据0-100刚好是50的整数倍,所以能正常匹配手动范围。
解决方法
在$scale数组中添加Factors参数,指定Y轴的刻度因子为90(刚好对应方位角的关键节点),或其他符合需求的因子,强制让手动范围生效:
修改后的代码片段
$scale = array( 'Mode' => SCALE_MODE_MANUAL, 'ManualScale' => array(0=>array("Min"=>0,"Max"=>360)), 'Factors' => array(0=>90) // 指定Y轴刻度因子为90,匹配方位角 );
说明
- 设置
Factors为90后,Y轴会严格遵循0-360的范围,同时刻度会自动对齐0°、90°、180°、270°、360°,完美适配方位标识线的需求。 - 如果需要更精细的刻度,可以将因子改为10、30等其他数值,只要确保360是该因子的整数倍即可。
内容的提问来源于stack exchange,提问作者Shdwdrgn
相关产品推荐
相关产品推荐

