Php Flot图表(数组3值)

Php Flot图表(数组3值),php,mysql,flot,Php,Mysql,Flot,我想知道是否可以用Flot图表来做,因为我不确定 我在数据库中有一个包含3行的表:日期开始、日期结束、药物治疗 Mi PHP代码: $sql = "SELECT * FROM medications ORDER BY DateStart"; $stmt = $PDO -> query($sql); $result=$stmt -> fetchAll(PDO::FETCH_ASSOC); foreach ($result as $row){ $dateini= $row['DateS

我想知道是否可以用Flot图表来做,因为我不确定

我在数据库中有一个包含3行的表:日期开始、日期结束、药物治疗

Mi PHP代码:

$sql = "SELECT * FROM medications ORDER BY DateStart";
$stmt = $PDO -> query($sql);
$result=$stmt -> fetchAll(PDO::FETCH_ASSOC);

foreach ($result as $row){
$dateini= $row['DateStart'];
$datend= $row['DateEnd'];   
$medic= $row['Medication'];

$data1 = array(strtotime($dateini)*1000,$medic);
$data2 = array(strtotime($datend)*1000,$medic);

$data3[] = array($data1,$data2);

}
如果我这样做:

echo json_encode($data3);
我得到数组: [[145653120000,12”]、[145670400000,12”]、[1456531200000,16”]、[145670400000,16”]、[1456617600000,13”]、[1456790400000,13”]、[145670400000,14”]、[1457049600000,14”]

<script>
var data3 = <?php echo json_encode($data3)?>;

$(function() {
var datasets = [
{
    label: "Medication",
    data: data3,
    yaxis: 1,
    color: "Yellow",
    points: { symbol: "diamond",  fillColor: "Yellow",show: true, radius: 6}

}
];

 $.plot($("#flot-placeholder"), datasets ,options); 
</script>
我明白了


可以获得图形写入数据集(以$.plot为单位)而不是数据3?

您的
数据集数组有两个问题:

  • 您的
    data3
    数组有多个数据系列,但您试图将其全部放入
    datasets
    数组中的一个数据集对象中。将每个数据系列放在一个单独的对象中(必要时有自己的选项)

  • Flot没有内置的
    菱形
    符号,您必须提供一个绘制菱形的函数

    function diamond(ctx, x, y, radius, shadow) {
        var size = radius * Math.sqrt(Math.PI) / 2;
        ctx.moveTo(x - size, y);
        ctx.lineTo(x, y + size);
        ctx.lineTo(x + size, y);
        ctx.lineTo(x, y - size);
        ctx.lineTo(x - size, y);
    }
    
  • 有关完整的工作示例,请参见此


    你需要描述你想要实现什么以及什么“不起作用”。我想这样做:如果你有更多的数据系列,你需要在
    数据集
    数组中添加更多的对象,你可以在for循环中转换它们,而不是手动。如果您在一个数据系列中有更多的时间戳,您只需在该行中获得更多该颜色/的钻石。可能会得到类似于图形的东西,但线条连接相同颜色的钻石?是的,将
    线条:{show:true}
    添加到ech数据系列(或
    选项
    )。你能帮我做变量数组的循环吗?看这个。如果你想定义你自己的颜色,你必须创建一个颜色数组并在循环中使用它。
    var datasets = [{
        label: "Medication",
        data: data3[0],
        yaxis: 1,
        color: "Yellow",
        points: {
            symbol: diamond,
            fillColor: "Yellow",
            show: true,
            radius: 6
        }
    }, {
        label: "Medication",
        data: data3[1],
        yaxis: 1,
        color: "red",
        points: {
            symbol: diamond,
            fillColor: "red",
            show: true,
            radius: 6
        }
    }, ... ]
    
    function diamond(ctx, x, y, radius, shadow) {
        var size = radius * Math.sqrt(Math.PI) / 2;
        ctx.moveTo(x - size, y);
        ctx.lineTo(x, y + size);
        ctx.lineTo(x + size, y);
        ctx.lineTo(x, y - size);
        ctx.lineTo(x - size, y);
    }