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();
두 라이브러리 모두에 코드 샘플을 추가해야합니다. –
@ MarcinNabiałek이 방금 두 그래프의 코드를 게시했습니다. 그것은 다소 효과가 있지만 확실히 더 잘할 수 있다고 생각합니다. 나는 어떤 도움/대체 솔루션으로도 기뻐할 것입니다. – WellBloud