С новым годом всех,
сегодня я скачал 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.
Я надеюсь, что кто-то может помочь мне с этой проблемой.
Доброе утро,
Я нашел проблему. Функция
$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;
}
...
}
}
Создать новый класс темы в папке темы. Класс темы будет вызываться как в следующем примере
разъединить ( «Программа / картинга / statistiken / графики / alle_zeiten _» $ intJahr «_ pie.png»..);
$ graph = new PieGraph (670 400, «авто»);
$ Graph-> SetShadow ();
$ Graph-> Заголовок-> Set ($ intJahr);
$ Graph-> Заголовок-> SetFont (FF_ARIAL, FS_BOLD, 20);
$ Graph-> Заголовок-> SetColor ( ‘# 4444FF’);
$ p1 = новый PiePlot ($ arrayData);
$ themeClass = new KartTheme;
$ Graph-> SetTheme ($ themeClass);
Других решений пока нет …