pChart - Можно ли объединить гистограмму с накоплением и обычную гистограмму?

Я пытаюсь использовать pChart для создания комбинированной диаграммы, используя 3 серии. Две серии будут для гистограммы с накоплением, а оставшаяся серия будет для гистограммы. Чего я пытаюсь добиться, так это поместить столбец с накоплением столбца с обычной полосой сбоку (например, общая полоса). Есть ли способ добиться этого? Я знаю, что в pChart есть возможность комбинирования диаграмм, но кажется, что это действительно хорошо работает только тогда, когда вы комбинируете различные типы диаграмм, например, гистограммы и линии. Но когда я пытаюсь объединить похожие графики, такие как гистограммы и гистограммы с накоплением, кажется, что они перезаписывают друг друга. Документация pChart не очень ясна по этому вопросу (или я действительно что-то упускаю). Мой код:

$MyData = new pData();
$Mydata->addPoints(array(0,97,149,167),"Previous");
$Mydata->addPoints(array(97,52,18,10),"Current");
$Mydata->addPoints(array(97,149,167,177),"Total");

$Mydata->setAxisName(0,"Quantity");
$Mydata->addPoints(array('1','2','3','4'),"Period");
$Mydata->setSerieDescription("Period","Period");
$Mydata->setAbscissa("Period");
$Mydata->setAbscissaName("Period");

$MyChart = new pImage(975,520,$MyData);
$MyChart->setFontProperties(array("FontName"=>"pChart/fonts/verdana.ttf","FontSize"=>11));

$MyChart->setGraphArea(270,100,940,390);
$MyChart->drawFilledRectangle(270,100,940,390,array("R"=>255,"G"=>255,"B"=>255,"Surrounding"=>-200,"Alpha"=>10));
$MyChart->drawScale(array('CycleBackground'=>TRUE,'Mode'=>SCALE_MODE_START0,'Factors'=>array(20),"Pos"=>SCALE_POS_TOPBOTTOM,"DrawSubTicks"=>FALSE,"GridR"=>128,"GridG"=>128,"GridB"=>128,"GridAlpha"=>20));
$MyChart->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
$MyChart->setFontProperties(array("FontName"=>"pChart/fonts/verdana.ttf","FontSize"=>11));

$MyData->setSerieDrawable("Total",FALSE);
$MyChart->drawStackedBarChart(array("DisplayValues"=>TRUE,"DisplayColor"=>DISPLAY_AUTO,"Rounded"=>TRUE,"Surrounding"=>60));

$MyData->setSerieDrawable("Previous",FALSE);
$MyData->setSerieDrawable("Current",FALSE);
$MyData->setSerieDrawable("Total",TRUE);
$MyChart->drawBarChart(array("DisplayPos"=>LABEL_POS_INSIDE,"DisplayValues"=>TRUE,"DisplayColor"=>DISPLAY_AUTO,"Rounded"=>TRUE,"Surrounding"=>60));

$MyChart->setShadow(FALSE);

$MyData->setSerieDrawable("Previous",TRUE);
$MyData->setSerieDrawable("Current",TRUE);
$MyChart->drawLegend(30,20,array("Alpha"=>20,"Mode"=>LEGEND_VERTICAL));

$MyChart->Render("Graph.png");

Спасибо за любую помощь.


person user1483255    schedule 19.06.2015    source источник


Ответы (1)


$MyData->setSerieDrawable("Received",true);
$MyData->setSerieDrawable("Despatched",true);

pData::setSerieDrawable не работает в PHP 5.2.6 — может работать в более поздних версиях, но мои знания ООП ограничены. Ранее, когда $myPicture = new pImage($imgW,400,$MyData); вызывался с экземпляром $MyData, я думаю, к нему добавлялось pImage.

Проблема в том, что $MyData->setSerieDrawable("Despatched",true); влияет на $MyData, а не на данные в pImage. Моим решением было добавить новую функцию в pImage:

function SetisDrawable($SerieName='', $isDrawable=false) {
    if(!empty($SerieName)){
        $this->DataSet->Data["Series"][$SerieName]["isDrawable"] =  $isDrawable;
    }
}

$myPicture->SetisDrawable("Received", FALSE);
$myPicture->SetisDrawable("Despatched", FALSE);
$myPicture->SetisDrawable("WIP", TRUE);
$myPicture->drawLineChart(array("DisplayValues"=>TRUE, "DisplayOffset"=>"15"));
person Chris Bowker    schedule 08.06.2018