使用PHP创建图表类

时间:2013-01-10 16:09:33

标签: php css class graph

我选择进行的部分学校编程项目需要根据用户数据使用PHP生成条形图。我的老师明确表示我不得使用开源类或任何其他人的代码。他也禁止我使用CSS来显示图表,部分声称它不可能(我已经在网上看到过这种方式)。

我简要介绍了一些流行的PHP图形类,例如Jpchart和Pchart,它们看起来相当复杂,有数万行代码。

当然必须编写一个类来生成jpeg也必须相当复杂。

有没有人有任何建议,或者我应该放下脚步告诉他这些期望是不现实的?

5 个答案:

答案 0 :(得分:1)

他对CSS的看法是错误的,如果我们刚刚谈论一个简单的条形图,那么自CSS发明之日起就出错了。使用少量<div>标签和少量CSS创建条形图是微不足道的。

他可能正在寻找他理解的特定解决方案 - 也许是HTML表格? (我真的希望不是)或者可能使用PHP中的GD库生成图像。

如果我是你,我会选择像SVG这样的不寻常的解决方案。在SVG中生成图表,并将其输出到浏览器。符合他的标准,但没有使用他的任何“禁止”选项。 (但请注意 - 在使用此选项之前,请确保您的教师使用支持SVG的浏览器[即比IE8更新]!)

答案 1 :(得分:0)

这并不难。看一下php中的图像功能。 gdimage magick

特别是rectangle函数对你来说很有意思。

答案 2 :(得分:0)

禁止你使用CSS是他的全部动作。没有使用GDlib函数[我假设不是练习的重点]你可以创建一个1x2单元格表并根据条形值设置单元格宽度,但它会有点痛苦没有 CSS。为了避免Dickbag教授的愤怒,你将无法在所有事情上设置HTML属性。

您的教师完全错误 关于CSS无法实现这一点。

如果他只是一个愤怒的老式领带,他可能想要这样的事情:

Tom:   |****      | 43%
Dick:  |***       | 27%
Harry: |********  | 82%

所以这就像1981年在某些DEC PDP上回来一样。

修改

由于您的教师规定他希望图形采用图像的形式,因此您需要使用GD library functionsimagefilledrectangle()文档页面中的示例代码应该足以让您入门:

<?php
// Create a 55x30 image
$im = imagecreatetruecolor(55, 30);
$white = imagecolorallocate($im, 255, 255, 255);

// Draw a white rectangle
imagefilledrectangle($im, 4, 4, 50, 25, $white);

// Save the image
imagepng($im, './imagefilledrectangle.png');
imagedestroy($im);

答案 3 :(得分:0)

通过html / css绘制图表是完全可能的。

让我们说你制作条形图。首先计算min + max并计算两者的高度。然后取出所有其他值并决定它们的高度(最小值/最大值的某个百分比)。在那之后,你有两个选择。 1,给出你的html作为表格w / cells和explicilty给出它们的高度/宽度。或者使用id和类渲染一堆div然后动态创建你的css(或者使用style属性内联或者只是动态地将css写入脚本标记)并在你的css中根据你之前的决定设置高度。

这里是使用D3js库的some code。 这种方法非常合理,只需使用php而不是js以类似的方式执行代码。

如果你想看一些其他例子:html / css图表的here are some examplespcharts是一个很棒的库,它使用GD php扩展来生成jpg / png格式的图表图像。如果您计划动态生成图像,这个库应该提供一些很好的灵感。

<强>更新 我忍不住做一个php / css的例子:

<html>
<head>
    <style type="text/css">
        .bar {
            background: #660000;
            color: #fff;
            height: 20px;
            width: auto;
            min-width: 2px;
            clear: both;
            margin-bottom: 5px;
            padding: 5px;
            font-weight: bold;
        }
    </style>
</head>
<body>
<?php

    //array of values
    $vals = array(
        'git' => 9001, 
        'svn' => 4213, 
        'bitkeeper' => 7391,
        'mercurial' => 2114,
        'cvs' => 806, 
    );
    //minimim and maximum
    $min = 1;
    $max = 200;

    //calculate scale, draw, and loop
    foreach ($vals as $key => $val) {
        $scale = (2 * ($val-$min)/($max-$min))*8;
        echo('<div class="bar" style="width: '.$scale.'px" title="'.$key.' = '.$val.'">'.$key."</div>");
    }

?>
</body>
</html>

答案 4 :(得分:0)

一旦你将其分解为基本任务,这很简单。回想一下你最初在学校如何制作图表的方法:

  • 您从图表的大小(即纸张尺寸)开始
  • 您知道需要绘制多少条形图,以便您可以计算出每个需要的空间
  • 您知道数据中的最大值和最小值,因此很容易计算出尺度

其余的只是键和标题!