如何在PHP中渲染背景中有限制区域的重叠图

如何在PHP中渲染背景中有限制区域的重叠图,php,graph,smarty,phpgraphlib,Php,Graph,Smarty,Phpgraphlib,我需要在一个图像中渲染2个图形。第一个值为产品价格(条形图),第二个值为价格范围。我想做的是,渲染这些范围的区域,并在它们之上渲染产品的实际价格,这样我就可以看到产品是否在1级范围内等 例: 现在,图表应该显示正常的价格条形图,但也显示3个水平区域(或3个不同的背景)。A应该能够看到哪些产品还可以,哪些产品有疯狂的价格(比如产品F定价过高等等) 我试过了,但没有找到正确的解决办法。最接近的结果类似于,我设定了6条球门线(从到组合),但不是很清楚,也很难看到 现在我正在尝试解决这个问题-我设法将两

我需要在一个图像中渲染2个图形。第一个值为产品价格(条形图),第二个值为价格范围。我想做的是,渲染这些范围的区域,并在它们之上渲染产品的实际价格,这样我就可以看到产品是否在1级范围内等

例:

现在,图表应该显示正常的价格条形图,但也显示3个水平区域(或3个不同的背景)。A应该能够看到哪些产品还可以,哪些产品有疯狂的价格(比如
产品F
定价过高等等)

我试过了,但没有找到正确的解决办法。最接近的结果类似于,我设定了6条球门线(从到组合),但不是很清楚,也很难看到

现在我正在尝试解决这个问题-我设法将两个图形合并到一个图像中-产品的条形图和价格水平的面积图,但这似乎不是最简单和正确的解决方案。在这些图书馆里有没有办法做到这一点

编辑:

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,转而使用了一个javascript解决方案


设置起来很容易,渲染的图形更便于查看。您可以在一个结果中添加多个图形,以及所需的背景-对于我使用的多个图形。很有魅力。

您应该在这两种模式中都添加代码示例libraries@MarcinNabiałek刚刚发布了两个图的代码。这有点奏效,但我认为肯定可以做得更好。我很乐意得到任何帮助/替代解决方案。
// 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();