簡體   English   中英

如何使用背景中的限制區域渲染PHP中的覆蓋圖

[英]How to render overlaying graphs in PHP with limit areas in the background

我需要在1張圖像中渲染2張圖。 第一個值是產品價格(條形圖),第二個值是價格范圍。 我想做的是渲染這些范圍內的區域,並在它們之上渲染產品的實際價格,這樣我就可以看到產品是否在第一級等范圍內。

例:

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個不同背景)。 A應該能夠看到哪些產品還可以,哪些產品的價格有些瘋狂(例如, Product F的價格過高等)

我已經嘗試過PHPGraphLib ,但是沒有找到正確的解決方案。 最接近的結果與示例6相似,在示例6中 ,我設置了6條目標線(從-到組合),但是它不是很清楚,也很難看到。

現在,我試圖在PHPlot中解決此問題-我設法在一張圖片中加入了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();

我注意到此問題不再有效,因此我想將解決方案發布給其他任何人。 最后,我放棄了PHPlot和PHPGraphLib,並通過FusionCharts使用javascript解決方案。

它很容易設置,並且呈現的圖形更易於查看。 您可以在一個結果中添加多個圖形,以及所需的背景-對於那些我使用多個趨勢區的背景 很有魅力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM