【问题标题】:jpgraph - SetCenter does not workjpgraph - SetCenter 不工作
【发布时间】:2015-02-28 23:07:42
【问题描述】:

大家新年快乐,

今天我下载了 jpgrap 并查看了示例。 我想创建一个饼图,左侧有图例,右侧有图表。

在网上我发现功能 SetCenter 应该移动图形,但它不起作用。图表始终显示在中心。

这是我的代码

<?php
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_pie.php');

$strSql = "SELECT
                YEAR(Datum) AS JAHR
            FROM kart_rundenzeiten_kopf
            WHERE
                BahnID = '".$_SESSION['KART_STATISTIK_BAHN_ID']."'
            GROUP BY YEAR(Datum)
            ORDER BY JAHR DESC";
$result = mysql_query($strSql) or die("MySQL-Error: ".mysql_error());

$strLR = 'L';

while ($row = mysql_fetch_assoc($result))
{
    $intJahr = $row['JAHR'];

    switch( $strLR )
    {
        case 'L':
            {
                $strFloat = 'left';
                $strLR = 'R';
            } break;

        case 'R':
            {
                $strFloat = 'right';
                $strLR = 'L';
            } break;
    }
?>
    <div style="display:block; float:<?php echo $strFloat; ?>; width:49.5%;">
        <div class="div_hauptbereich" style="display:block;">
            <?php
            $strSql2 = "SELECT
                            FLOOR( (A.Rundenzeit / 1000) ) AS RUNDENZEIT,
                            COUNT(*) AS ANZAHL
                        FROM kart_rundenzeiten_posten A
                        LEFT JOIN kart_rundenzeiten_kopf B ON A.BahnID = B.BahnID AND A.RundenID = B.KopfID
                        WHERE
                            B.BahnID = '".$_SESSION['KART_STATISTIK_BAHN_ID']."'
                            AND B.Strecke = '".$_SESSION['KART_STATISTIK_STRECKEN_ID']."'
                            AND YEAR(B.Datum) = '".$intJahr."'
                        GROUP BY FLOOR( (A.Rundenzeit / 1000) )
                        ORDER BY RUNDENZEIT";
            $result2 = mysql_query($strSql2) or die("MySQL-Error: ".mysql_error());

            $arrayData = array();
            $arrayLegende = array();

            while($row2 = mysql_fetch_assoc($result2))
            {
                $strZeit = Sekunden_In_Zeit( $row2['RUNDENZEIT'] );
                $intAnzahl = $row2['ANZAHL'];

                array_push( $arrayData, $intAnzahl );
                array_push( $arrayLegende, $strZeit.' - '.$intAnzahl.'x' );
            }

            print_r($arrayData);

            unlink("programme/kart/statistiken/charts/alle_zeiten_".$intJahr."_pie.png");

            $graph = new PieGraph(670,400,"auto");
            $graph->SetShadow();

            $graph->title->Set($intJahr);
            $graph->title->SetFont(FF_ARIAL,FS_BOLD,20);
            $graph->title->SetColor('#4444FF');

            $p1 = new PiePlot($arrayData);

            $p1->SetSize(0.3);
            $p1->SetCenter(0.35,0.5);

            $p1->value->SetFont(FF_FONT1);
            $p1->value->SetColor("black");

            $p1->SetLabelType(PIE_VALUE_ABS);

            $p1->value->SetFormat("%d");
            $p1->value->HideZero();
            $p1->value->Show();

            $p1->SetLegends( $arrayLegende );
            $graph->legend->Pos(0.73,0.05);
            $graph->legend->SetColumns(2);

            $graph->Add($p1);
            $graph->Stroke("programme/kart/statistiken/charts/alle_zeiten_".$intJahr."_pie.png");
            ?>

            <img src="programme/kart/statistiken/charts/alle_zeiten_<?php echo $intJahr; ?>_pie.png">
        </div>
    </div>
<?php
}
?>

我需要在 php 中更改任何设置吗? 我正在使用 Firefox 34,但我也尝试使用 IE 11。

希望有人能帮我解决这个问题。

【问题讨论】:

  • 你能添加一些你得到的(精简的)HTML吗?仅从 PHP 很难判断。
  • 我在整个 php 文件中添加了一个答案。你可以用它吗?
  • 我的要求显然不够清楚。如果我们只能看到 PHP,就很难确定您的浏览器正在获取什么 HTML。我要的是您在浏览器中获得的相关 HTML。您应该将其添加到您的问题中,而不是将其添加为答案(我认为所有用户都可以编辑自己的问题)。

标签: php jpgraph


【解决方案1】:

早安,

我发现了问题。功能

$p1->SetCenter(0.35,0.5);

将正确执行。但问题出在主题课上。在此类中,SetCenter 函数正在重置位置。

作为解决方案,有不同的可能性: 1.默认使用UniversalTheme.class.php,你可以去掉SetCenter这一行。我的情况是 PiePlot-Case。

function ApplyPlot($plot) {
    switch (get_class($plot))
    { 
        ...

        case 'PiePlot':
        {
            $plot->SetCenter(0.5, 0.45);
            $plot->ShowBorder(false);
            $plot->SetSliceColors($this->GetThemeColors());
            break;
        }

        ...
    }
}
  1. 在文件夹 themes 中创建一个新的主题类。主题类将被调用,如下例所示

    unlink("programme/kart/statistiken/charts/alle_zeiten_".$intJahr."_pie.png");

    $graph = new PieGraph(670,400,"auto"); $graph->SetShadow();

    $graph->title->Set($intJahr); $graph->title->SetFont(FF_ARIAL,FS_BOLD,20); $graph->title->SetColor('#4444FF');

    $p1 = new PiePlot($arrayData);

    $themeClass = new KartTheme; $graph->SetTheme($themeClass);

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多