jpgraph绘图之Y轴刻度倒排序

需求:
    jpgraph默认的图片为Y轴从上到下是从大到小的顺序,但是项目中要把Y轴的刻度反转过来,并设置Y轴刻度为最小值到最大值之间,本例为了美观故增加2个刻度。
    我参考例子:inyaxisex2.php 有这个需求的朋友可以参考这个实例.

    核心代码:

//生成趋势图
function generatePhoto($xdata, $ydata, $type, $bgcolor = '#F0FBFF', $width = 680, $height = 210, $l_margin = 30, $r_margin = 8, $t_margin = 5, $d_margin = 25, $boxcolor = array (224, 235, 237 )) {
    require_once (CORE_DIR . '../jpgraph/jpgraph.php');
    require_once (CORE_DIR . '../jpgraph/jpgraph_line.php');
    $IsOnlyDot = 1;//是否在有值的地方进行描点
    $DotCount = 0;
    $max = max ( $ydata ) + 2;
    for($i = 0; $i < sizeof ( $ydata ); $i ++) {
        if ($ydata [$i] != '-' && ( int ) $ydata [$i] > 0) {
            $DotCount ++;
            if (! isset ( $min )) {
                //此处是一个过滤掉'-'值取得数组内最小值的函数,由于字符串默认会被当成0(本例是Y轴没有负值的,如果有的话可以不用考虑)
                $vt = $this->getMin ( $ydata, '-' ) - 2;
                $min = $vt > 0 ? $vt : 0;
            }
            $ydata [$i] = round ( - $ydata [$i] );
        }
    }
    //当只有一个值的时候描点
    if ($DotCount == 1) {
        $IsOnlyDot = 1;
    }
    //有时候可能会出现取出来的值大小颠倒,会报错,这里设置默认值
    if (- $max > -$min) {
        $max = 4;
        $min = 0;
    }
    $graph = new Graph ( $width, $height );
    $graph->SetScale ( 'textint', - $max, - $min );
    $graph->yscale->SetGrace ( 10 );
    //不设置此项的话数据会显示的不正常,目前不知为何原因,知道的朋友可以tell me.
    $graph->SetAxisStyle ( AXSTYLE_BOXIN );
    //边距:左 右 上 下,此图形会显示上下X轴,左右的Y轴,通过更改margin掩盖上面和右边的X和Y轴
    $graph->SetMargin ( $l_margin, $r_margin, $t_margin, $d_margin );
    $graph->SetBox ( true, $boxcolor );
    $graph->SetFrame ( true, $bgcolor, 3 );
    $graph->SetMarginColor ( $bgcolor );
    // Stroke the left Y-axis
    //$graph->yaxis->SetPos ( 'min' );
    $graph->yaxis->SetLabelSide ( SIDE_LEFT );
    // Use Ariel font
    $graph->yaxis->SetLabelFormatCallback ( array ($this, "_cb_negate" ) );
    $graph->xaxis->SetTickLabels ( $xdata );
    $graph->xaxis->SetFont ( FF_ARIAL, FS_NORMAL, 9 );
    $graph->yaxis->SetFont ( FF_ARIAL, FS_NORMAL, 9 );
    $graph->xgrid->Show (); //是否显示格子
    //$graph->yaxis->HideZeroLabel ();
    $graph->yaxis->HideTicks ( false, true );
    $graph->ygrid->SetFill ( true, '#ffffff@0.5', '#FFFBFC@0' );
    $graph->ygrid->SetColor ( '#F7DFE2@0.5' );
    $graph->xgrid->SetColor ( '#F7DFE2@0.5' ); //设置格子颜色和粗细
    // Create the plot line
    $p1 = new LinePlot ( $ydata );
    if ($IsOnlyDot) {
        $p1->mark->SetType ( MARK_FILLEDCIRCLE ); //MARK_STAR 设置圆圈的样式
        $p1->mark->SetFillColor ( "#ffeeff" ); //设置圆圈填充的颜色
        $p1->SetWeight ( 3 );
        $p1->mark->SetWidth ( 4 ); //设置圆圈的直径
        $p1->mark->SetColor ( "red" ); //设置圆圈边框的颜色
    }
    $graph->Add ( $p1 );
    $p1->value->SetColor ( "blue" ); //设置值的颜色
    $p1->SetStyle ( "solid" ); //设置线条样式
    $p1->SetColor ( 'red' ); //设置线条颜色
    //$graph->yaxis->scale->SetGrace ( 20 ); //设置y轴更优美一些
    //$graph->xaxis->SetLabelAngle(20);//设置X轴的显示值的角度;
    //$p1->value->Show();//显示值
    //$graph->img->SetAngle(180);//将图翻转多少度
    //$graph->xaxis->title->Set("queries"); //设置坐标轴名称
 
    $graph->xaxis->SetColor ( "#885680" ); //设置x轴坐标文字的颜色
    $graph->yaxis->SetColor ( "#417AD2" ); //设置Y轴坐标文字的颜色
    // Output graph
    $graph->Stroke ();
}
 
// 对Y轴的刻度进行否定
function _cb_negate($aVal) {
    return round ( - $aVal );
}

反转需要注意的地方:
 第一、使用回调函数_cb_negate对Y轴的刻度进行否定,用到的函数SetLabelFormatCallback
 第二、对Y轴的值进行否定。即本例的$ydata [$i] = round ( - $ydata [$i] );

原文地址:http://www.yzswyl.cn/blread-1461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值