2017-08-03 4 views
0

私はjpgraphを使って簡単なグラフを作成しようとしています(これは新しいものです。私はそのウェブサイトの棒グラフの例を使っています)。丸められた数字を返すy軸。 私はウェブを検索し、textintを使用する必要があることを知りました。jpgraph textint y軸は数値の代わりに0fを返します

$graph->SetScale("textint"); 
$graph->yaxis->SetTickPositions(array(0,1,2,3,4,5); 

何とか代わりに、私は今、y軸上のすべてのステップのため0Fを取得し、全体の数を返す:

は、だから今は、これらの2行を持っています。それは0Fになり、なぜ 私はちょうど把握することはできません:( 誰かが私のための魔法の答えを持っていますか?何を私が間違っているのか、それは値0Fにつながる作るために?

Example image here

もっとコード:

$graphSettings = [ 
    'tick_positions' => [0, 1, 2, 3, 4, 5], 
    'tick_labels' => ['Q1 2017', 'Q2 2017', 'Q3 2017', 'Q4 2017', 'Q1 2018'], 
]; 

$graphs = []; 
foreach ($questions as $key => $question) { 
    $graphs[] = $this->generateGraph($graphSettings, $question, $key); 
} 

public function generateGraph($settings, $question, $key) { 
    $data1y = $question['bar_plots']; // height of bars 

    // Create the graph. These two calls are always required 
    $graph = new \Graph(500, 200, 'auto'); 
    $graph->SetScale("textint"); 

    $theme_class = new \UniversalTheme; 
    $graph->SetTheme($theme_class); 

    $graph->yaxis->SetTickPositions($settings['tick_positions']); // array y numbers, array y between dashes 
    $graph->SetBox(false); 

    $graph->ygrid->SetFill(false); 
    $graph->xaxis->SetTickLabels($settings['tick_labels']); 
    $graph->yaxis->HideLine(false); 
    $graph->yaxis->HideTicks(false, false); 

    // Create the bar plots 
    $b1plot = new \BarPlot($data1y); 

    // ...and add it to the graPH 
    $graph->Add($b1plot); 

    $b1plot->SetColor("white"); 
    $b1plot->SetFillColor("#41b6e6"); 

    // Return the graph 
    $contentType = 'image/png'; 
    ob_start(); 
    $graph->Stroke(); 
    $image_data = ob_get_clean(); 

    $str = "data:$contentType;base64," . base64_encode($image_data); 
    return $str; 
} 

編集: 高さ敷石を変化させながら、私は気づきました(今は500×200ではなく、180×500)というグラフが、私が期待していた数字を表示するようになった。これはプラグイン自体のバグですか?

答えて

0

これはプラグインに問題があります。 PHP5.6からPHP7に移行する際に、この問題に遭遇しました。

問題:jpgraph.phpの内部クラスLinearTicksで

方法_doLabelFormat()は、$precision値を算出し、sprintf通話中の式の一部としてそれを使用します。この$precisionの値が負の数になることがあり、PHP7ではsprintfの式が無効になることがあります。

ソリューション

方法LinearTicksの最後のelseコール - > _ doLabelFormat()次のようになります。

$l = sprintf('%01.'.$precision.'f',round($aVal,$precision));

、私のファイルには、ライン#4306

の周りに現れます

次の行を追加してください。

$precision = abs($precision);

これはあなたの$precision値は常に正の数であるとはsprintfの呼び出しに渡され取得された書式設定の問題のすべてを解決する必要がありますを確認します。

関連する問題