2014-06-06 3 views
1

1 개의 이미지에 2 개의 그래프를 렌더링해야합니다. 1의 값은 제품 가격 (막대 차트)이고 2는 가격 범위입니다. 내가하고 싶은, 그 범위의 영역을 렌더링하고 그 위에 제품의 실제 가격을 렌더링, 그래서 제품은 1 레벨의 범위 등PHP에서 그래프를 오버레이하여 렌더링하는 방법

예 : 경우 내가 볼 수 있습니다

Ranges: 
1st price level: 100-300 
2nd price level: 400-700 
3rd price level: 900-1500 

Product prices: 
Product A: 70 
Product B: 170 
Product C: 250 
Product D: 570 
Product E: 1270 
Product F: 1800 

이제 그래프에는 가격의 일반 막 대형 차트가 표시되어야하지만 3 개의 가로 영역 (또는 3 가지 배경)이 표시되어야합니다. 어떤 제품이 괜찮은지, 어떤 제품에 어떤 미친 가격이 있는지를 알 수 있어야합니다.

나는 시도한 바가 있지만 PHPGraphLib이지만 올바른 해결책을 찾지 못했습니다. 가장 가까운 결과는 Example 6과 비슷했는데 목표 행을 6 개 설정했는데 (from-to 조합) 매우 명확하고보기가 어렵지 않습니다.

지금이 문제를 해결하려고 노력 중입니다. PHPlot - 제품에 대한 이미지 막대 차트 1 개와 가격 수준에 대한 영역 그래프 2 개를 결합했지만 가장 쉽고 정확한 해결책은 아닙니다. . 이 라이브러리에서이 작업을 수행하는 방법이 있습니까?

편집 :

PHPGraphLib 코드 :

$graph = new PHPGraphLib(500, 350); 
$data = array(); 
// product prices 
$data['prod_a'] = 70; 
$data['prod_b'] = 170; 
$data['prod_c'] = 250; 
$data['prod_d'] = 570; 
$data['prod_e'] = 1270; 
$data['prod_f'] = 1800; 

$graph->addData($data); 
$graph->setBarColor('#cccccc'); 
$graph->setDataValues(true); 
$graph->setLegend(true); 
$graph->setLegendTitle('OKPC'); 

// price levels 
$graph->setGoalLine(100, "#ff0000", "dashed"); 
$graph->setGoalLine(300, "#ff0000", "solid"); 
$graph->setGoalLine(400, "#00ff00", "dashed"); 
$graph->setGoalLine(700, "#00ff00", "solid"); 
$graph->setGoalLine(900, "#0000ff", "dashed"); 
$graph->setGoalLine(1500, "#0000ff", "solid"); 

$graph->createGraph(); 

PHPlot 코드 :

// product prices 
$data1 = array(
    array('prod_a', 100, 300, 400, 700, 900, 1500), 
    array('prod_b', 100, 300, 400, 700, 900, 1500), 
    array('prod_c', 100, 300, 400, 700, 900, 1500), 
    array('prod_d', 100, 300, 400, 700, 900, 1500), 
    array('prod_e', 100, 300, 400, 700, 900, 1500), 
    array('prod_f', 100, 300, 400, 700, 900, 1500), 
); 
// price levels 
$data2 = array(
    array('prod_a', 70), 
    array('prod_b', 170), 
    array('prod_c', 250), 
    array('prod_d', 570), 
    array('prod_e', 1270), 
    array('prod_f', 1800), 
); 

$plot = new PHPlot(800, 600); 
$plot->SetImageBorderType('plain'); 
$plot->SetPrintImage(False); 

// Plot 1 
$plot->SetDrawPlotAreaBackground(True); 
$plot->SetPlotType('area'); 
$plot->SetDataType('text-data'); 
$plot->SetDataValues($data1); 
$plot->SetPlotAreaWorld(NULL, 0, NULL, 3000); 
$plot->SetXTickLabelPos('none'); 
$plot->SetXTickPos('none'); 
$plot->SetYLabelType('data', 0); 
$plot->DrawGraph(); 

// Plot 2 
$plot->SetDrawPlotAreaBackground(False); 
$plot->SetDrawYGrid(False); 
$plot->SetPlotType('linepoints'); 
$plot->SetDataValues($data2); 
$plot->SetYTickPos('plotright'); 
$plot->SetYTickLabelPos('plotright'); 
$plot->SetDataColors('black'); 
$plot->DrawGraph(); 

$plot->PrintImage(); 
+0

두 라이브러리 모두에 코드 샘플을 추가해야합니다. –

+0

@ MarcinNabiałek이 방금 두 그래프의 코드를 게시했습니다. 그것은 다소 효과가 있지만 확실히 더 잘할 수 있다고 생각합니다. 나는 어떤 도움/대체 솔루션으로도 기뻐할 것입니다. – WellBloud

답변

0

내가이 질문은 더 이상 활성, 그래서 누군가를 위해 내 솔루션을 게시 할 몰랐 그밖에. 결국 PHPlot과 PHPGraphLib을 모두 삭제하고 FusionCharts과 함께 javascript 솔루션을 사용했습니다.

설정이 쉽고 렌더링 된 그래프가보기보다 친숙합니다. 하나의 결과에 여러 개의 그래프를 추가 할 수 있습니다. 또한 여러 개의 그래프를 추가 할 수 있습니다. 복수의 그래프를 사용하는 경우에는 복수의 trendzones을 사용해야합니다. 매력으로 작동합니다.

관련 문제